[M1 Mac, Big Sur 11.6.7, Rust 1.62.0]
Rustコードに導入するPythonスクリプトが自製ライブラリをimportする場合は、.bash_profileにPYTHONPATHとしてライブラリのあるディレクトリを設定します。
これでランチャーアプリに登録するPythonスクリプトが4つに増えました。
# 導入するPythonスクリプトのあるディレクトリ設定
export PYTHONPATH="/code/Python/library/python_module"
# importする自製ライブラリのあるディレクトリ設定
export PYTHONPATH="/code/Python/library"
use fltk::{app, prelude::*, button::*, window::Window, group::{Group}};
use pyo3::prelude::*;
fn pythonmodule1() -> PyResult<()> {
Python::with_gil(|py| {
println!("module1 start");
let mymodule = PyModule::import(py, "OutingCosts")?;
let response:i32 = mymodule.getattr("outingcosts")?.call0()?.extract()?;
println!("module1 {}", response);
Ok(())
})
}
fn pythonmodule2() -> PyResult<()> {
Python::with_gil(|py| {
println!("module2 start");
let mymodule = PyModule::import(py, "PhotoSorting")?;
let response:i32 = mymodule.getattr("photosorting")?.call0()?.extract()?;
println!("module2 {}", response);
Ok(())
})
}
fn pythonmodule3() -> PyResult<()> {
Python::with_gil(|py| {
println!("module3 start");
let mymodule = PyModule::import(py, "Scraping")?;
let response:i32 = mymodule.getattr("scraping")?.call0()?.extract()?;
println!("module3 {}", response);
Ok(())
})
}
fn pythonmodule4() -> PyResult<()> {
Python::with_gil(|py| {
println!("module4 start");
let mymodule = PyModule::import(py, "ScrapingJP")?;
let response:i32 = mymodule.getattr("scrapingjp")?.call0()?.extract()?;
println!("module4 {}", response);
Ok(())
})
}
fn main() {
let app = app::App::default();
let mut window = Window::new(100, 100, 360, 190, "Tool Launcher");
let grp = Group::new(15, 15, 285 , 160, "");
let mut _btn1= RadioRoundButton::new(15, 15, 140, 20, "OutingCosts");
_btn1.set(true);
let mut _btn2= RadioRoundButton::new(15, 50, 140, 20, "PhotoSorting");
let mut _btn3= RadioRoundButton::new(15, 85, 140, 20, "Scraping");
let mut _btn4= RadioRoundButton::new(15, 120, 140, 20, "ScrapingJP");
let mut _btn5= RadioRoundButton::new(15, 155, 140, 20, "");
let mut _btn6= RadioRoundButton::new(160, 15, 140, 20, "");
let mut _btn7= RadioRoundButton::new(160, 50, 140, 20, "");
let mut _btn8= RadioRoundButton::new(160, 85, 140, 20, "");
let mut _btn9= RadioRoundButton::new(160, 120, 140, 20, "");
let mut _btn10= RadioRoundButton::new(160, 155, 140, 20, "");
grp.end();
let mut _btn = Button::new(300, 15, 50, 25, "実行");
_btn.set_callback(move |_| {
let _onoff1 = _btn1.value();let _onoff2 = _btn2.value();let _onoff3 = _btn3.value();
let _onoff4 = _btn4.value();let _onoff5 = _btn5.value();let _onoff6 = _btn6.value();
let _onoff7 = _btn7.value();let _onoff8 = _btn8.value();let _onoff9 = _btn9.value();
let _onoff10 = _btn10.value();
if _onoff1 == true{
pythonmodule1();
} else if _onoff2 == true{
pythonmodule2();
} else if _onoff3 == true{
pythonmodule3();
} else if _onoff4 == true{
pythonmodule4();
}
});
window.end();
window.show();
app.run().unwrap();
}