2323from .add_data_widget import AddDataWindow
2424from .arguments_browser import ArgumentsBrowser
2525from .dialog_widgets import IconFileDlg , ScriptFileDlg
26+ from .multi_item_edit_widget import MultiPkgEditWindow
2627from .pyenv_combobox import PyEnvComboBox
2728from .pyinstaller_option_widget import load_pyinst_options
2829
@@ -75,6 +76,11 @@ def __init__(self, parent: QMainWindow) -> None:
7576 self .add_binary_dlg = AddDataWindow ()
7677 self .binary_item_list : list [AddDataWindow .data_item ] = []
7778
79+ # 添加隐式导入
80+ self .hidden_import_btn = QPushButton ()
81+ self .hidden_import_dlg = MultiPkgEditWindow ()
82+ self .hidden_import_list : list [str ] = []
83+
7884 # 清理缓存与临时文件
7985 self .clean_checkbox = QCheckBox ()
8086
@@ -113,6 +119,9 @@ def _setup_ui(self) -> None:
113119 self .add_data_dlg .setWindowTitle ("添加数据文件" )
114120 self .add_binary_dlg .setWindowTitle ("添加二进制文件" )
115121
122+ self .hidden_import_btn .setText ("隐式导入" )
123+ self .hidden_import_dlg .setWindowTitle ("Hidden import" )
124+
116125 self .clean_checkbox .setText ("清理" )
117126 self .clean_checkbox .setChecked (False )
118127 self .pyinstaller_args_browser .setMaximumHeight (80 )
@@ -123,11 +132,15 @@ def _setup_ui(self) -> None:
123132 # 将 PyInstaller 选项详情设置成各控件的 ToolTip
124133 if self .option_dict :
125134 opt = self .option_dict
135+ # TODO: 解绑文本文档中的option字符和此处opt的键
126136 self .project_name_label .setToolTip (opt ["-n NAME, --name NAME" ])
127137 self .one_dir_btn .setToolTip (opt ["-D, --onedir" ])
128138 self .one_file_btn .setToolTip (opt ["-F, --onefile" ])
129139 self .add_data_btn .setToolTip (opt ["--add-data SOURCE:DEST" ])
130140 self .add_binary_btn .setToolTip (opt ["--add-binary SOURCE:DEST" ])
141+ self .hidden_import_btn .setToolTip (
142+ opt ["--hidden-import MODULENAME, --hiddenimport MODULENAME" ]
143+ )
131144 self .clean_checkbox .setToolTip (opt ["--clean" ])
132145
133146 def _connect_slots (self ) -> None :
@@ -205,6 +218,24 @@ def add_binary_selected(binary_item_list: list) -> None:
205218 self .parent_widget .statusBar ().showMessage ("添加二进制文件已更新" )
206219 self .option_selected .emit ((PyInstOpt .add_binary , binary_item_list ))
207220
221+ @QtCore .Slot ()
222+ def handle_hidden_import_btn_clicked () -> None :
223+ """
224+ 点击隐式导入按钮的槽函数 \n
225+ """
226+ self .hidden_import_dlg .show ()
227+
228+ @QtCore .Slot (list )
229+ def hidden_import_selected (hidden_import_list : list [str ]) -> None :
230+ """
231+ 用户完成了隐式导入编辑操作的槽函数 \n
232+ :param hidden_import_list: 隐式导入项列表
233+ """
234+
235+ self .hidden_import_list = hidden_import_list
236+ self .parent_widget .statusBar ().showMessage ("隐式导入已更新" )
237+ self .option_selected .emit ((PyInstOpt .hidden_import , hidden_import_list ))
238+
208239 @QtCore .Slot (bool )
209240 def clean_selected (selected : bool ) -> None :
210241 """
@@ -229,6 +260,8 @@ def clean_selected(selected: bool) -> None:
229260 self .add_data_dlg .data_selected .connect (add_data_selected )
230261 self .add_binary_btn .clicked .connect (handle_add_binary_btn_clicked )
231262 self .add_binary_dlg .data_selected .connect (add_binary_selected )
263+ self .hidden_import_btn .clicked .connect (handle_hidden_import_btn_clicked )
264+ self .hidden_import_dlg .items_selected .connect (hidden_import_selected )
232265 self .clean_checkbox .toggled .connect (clean_selected )
233266
234267 def _set_layout (self ) -> None :
@@ -266,6 +299,8 @@ def _set_layout(self) -> None:
266299 main_layout .addStretch (10 )
267300 main_layout .addLayout (add_btn_layout )
268301 main_layout .addStretch (10 )
302+ main_layout .addWidget (self .hidden_import_btn )
303+ main_layout .addStretch (10 )
269304 main_layout .addWidget (self .clean_checkbox )
270305 main_layout .addStretch (10 )
271306 main_layout .addWidget (self .pyinstaller_args_browser )
0 commit comments