Skip to content

Commit b21f7a8

Browse files
committed
Add multifunction_btn to SubProcessDlg
为子进程窗口添加多功能按钮并基本实现功能; 优化 `__main__.py` 中的 import 语句;
1 parent b9f1511 commit b21f7a8

2 files changed

Lines changed: 41 additions & 12 deletions

File tree

src/py2exe_gui/Widgets/dialog_widgets.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
QFileDialog,
66
QLabel,
77
QMessageBox,
8+
QPushButton,
89
QTextBrowser,
910
QVBoxLayout,
1011
QWidget,
1112
)
1213

13-
from py2exe_gui.Core.subprocess_tool import SubProcessTool
14+
from ..Core.subprocess_tool import SubProcessTool
1415

1516

1617
class ScriptFileDlg(QFileDialog):
@@ -144,6 +145,8 @@ class SubProcessDlg(QDialog):
144145
用于显示子进程信息的对话框
145146
"""
146147

148+
# TODO 重构SubProcessDlg
149+
147150
def __init__(self, parent: QWidget = None) -> None:
148151
"""
149152
:param parent: 父控件对象
@@ -153,6 +156,7 @@ def __init__(self, parent: QWidget = None) -> None:
153156

154157
self.info_label = QLabel(self)
155158
self.browser = QTextBrowser(self)
159+
self.multifunction_btn = QPushButton(self) # 可用于“取消”“打开输出位置”等的多功能按钮
156160
self._setup()
157161

158162
def _setup(self) -> None:
@@ -161,12 +165,17 @@ def _setup(self) -> None:
161165
"""
162166

163167
self.setWindowTitle("PyInstaller")
168+
self.setMinimumWidth(400)
164169
self.setModal(True)
165170

166-
layout = QVBoxLayout()
167-
layout.addWidget(self.info_label)
168-
layout.addWidget(self.browser)
169-
self.setLayout(layout)
171+
self.multifunction_btn.setMaximumWidth(80)
172+
173+
# 布局管理器
174+
main_layout = QVBoxLayout()
175+
main_layout.addWidget(self.info_label)
176+
main_layout.addWidget(self.browser)
177+
main_layout.addWidget(self.multifunction_btn)
178+
self.setLayout(main_layout)
170179

171180
def handle_output(self, subprocess_output: tuple[int, str]) -> None:
172181
"""
@@ -181,8 +190,11 @@ def handle_output(self, subprocess_output: tuple[int, str]) -> None:
181190
self.browser.append(output_text)
182191
elif output_type == SubProcessTool.FINISHED:
183192
self.info_label.setText("打包完成!")
193+
self.multifunction_btn.setText("打开输出位置")
184194
elif output_type == SubProcessTool.STATE:
185195
self.info_label.setText(output_text)
196+
if output_text == "正在运行中……":
197+
self.multifunction_btn.setText("取消")
186198

187199

188200
if __name__ == "__main__":

src/py2exe_gui/__main__.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import os
2+
import subprocess
13
import sys
24

35
from PySide6 import QtGui
46
from PySide6.QtWidgets import QApplication
57

6-
from py2exe_gui.Core.packaging import Packaging
7-
from py2exe_gui.Core.packaging_task import PackagingTask
8-
from py2exe_gui.Widgets.dialog_widgets import SubProcessDlg
9-
from py2exe_gui.Widgets.main_window import MainWindow
8+
# from .Constants import *
9+
from .Core import Packaging, PackagingTask
10+
from .Widgets import MainWindow, SubProcessDlg
1011

1112

1213
class MainApp(MainWindow):
@@ -21,11 +22,11 @@ def __init__(self, *args, **kwargs) -> None:
2122
self.packager = Packaging(self)
2223
self.subprocess_dlg = SubProcessDlg(self)
2324

24-
self._connect_signals()
25+
self._connect_slots()
2526

2627
self.status_bar.showMessage("就绪")
2728

28-
def _connect_signals(self) -> None:
29+
def _connect_slots(self) -> None:
2930
"""
3031
连接各种信号与槽 \n
3132
"""
@@ -38,7 +39,6 @@ def _connect_signals(self) -> None:
3839
self.center_widget.handle_ready_to_pack
3940
)
4041

41-
# TODO 优化pyinstaller_args_browser的接口
4242
self.packager.args_settled.connect(
4343
lambda val: self.center_widget.pyinstaller_args_browser.enrich_args_text(
4444
val
@@ -50,6 +50,23 @@ def run_packaging():
5050
self.subprocess_dlg.show()
5151

5252
self.center_widget.run_packaging_btn.clicked.connect(run_packaging)
53+
54+
def handle_multifunction():
55+
"""处理子进程对话框多功能按钮点击信号的槽 \n"""
56+
btn_text = self.subprocess_dlg.multifunction_btn.text()
57+
if btn_text == "取消":
58+
self.packager.subprocess.abort_process()
59+
self.subprocess_dlg.close()
60+
elif btn_text == "打开输出位置":
61+
dist_path = self.packaging_task.script_path.parent / "dist"
62+
if sys.platform.startswith("win32"):
63+
os.startfile(dist_path)
64+
elif sys.platform.startswith("linux"):
65+
subprocess.call(["xdg-open", dist_path])
66+
elif sys.platform.startswith("darwin"):
67+
subprocess.call(["open", dist_path])
68+
69+
self.subprocess_dlg.multifunction_btn.clicked.connect(handle_multifunction)
5370
self.packager.subprocess.output.connect(self.subprocess_dlg.handle_output)
5471

5572
def closeEvent(self, event: QtGui.QCloseEvent) -> None:

0 commit comments

Comments
 (0)