PyQt5+Qt Designer主窗口如何调用子窗口输入完成数值缩放?
要实现两个窗口的交互,核心是在子窗口点击OK时把缩放系数传递给主窗口,这里用Qt自带的信号槽机制实现最为规范,修改代码如下:
from ui_Stackoverflow1 import * from ui_Stackoverflow2 import * import sys class ScaleApp(QObject, Ui_ScaleWindow): # 自定义信号,用于传递输入的缩放系数 scale_confirmed = Signal(float) def __init__(self, window2): super().__init__() self.setupUi(window2) self.target_window = window2 # 绑定按钮点击事件 self.ok_button.clicked.connect(self.handle_ok) self.cancel_button.clicked.connect(self.target_window.close) def handle_ok(self): # 提取输入的缩放值,发射信号后关闭窗口 scale_value = self.scaling_box.value() self.scale_confirmed.emit(scale_value) self.target_window.close() class ButtonConnection(Ui_MainWindow): def __init__(self, window): self.setupUi(window) self.pushButton.clicked.connect(self.open_scale_window) self.important_number = 5 self.lineEdit.setText(str(self.important_number)) def open_scale_window(self): self.scale_window = QMainWindow() self.scale_ui = ScaleApp(self.scale_window) # 绑定子窗口的缩放信号到当前类的更新方法 self.scale_ui.scale_confirmed.connect(self.update_display_number) self.scale_window.show() def update_display_number(self, scale_val): # 执行缩放并更新显示 self.important_number *= scale_val self.lineEdit.setText(str(self.important_number)) if __name__ == "__main__": app = QApplication(sys.argv) MainWindow = QMainWindow() ui = ButtonConnection(MainWindow) MainWindow.show() app.exec_()
可选优化
如果希望弹出缩放窗口时禁止操作主窗口,可将open_scale_window方法修改为以下内容,使用模态对话框实现:
def open_scale_window(self): # 改用QDialog实现模态效果 self.scale_window = QDialog() self.scale_ui = ScaleApp(self.scale_window) self.scale_ui.scale_confirmed.connect(self.update_display_number) # 用exec_()替代show(),阻塞主窗口操作直到弹窗关闭 self.scale_window.exec_()
内容的提问来源于stack exchange,提问作者Kai Winkler
相关产品推荐
相关产品推荐

