PyQt技术问题:如何通过另一窗口按钮刷新当前窗口标签?
嘿,作为刚接触Python和PyQt5的树莓派玩家,你的需求我完全get到啦!下面我一步步帮你实现这个带对话框的触摸友好型GUI~
实现步骤详解
1. 先确认树莓派环境没问题
首先得确保树莓派上已经装好PyQt5全家桶,要是还没装,在LXTerminal里跑这条命令:sudo apt-get install python3-pyqt5 pyqt5-dev-tools
(树莓派默认用Python3,所以直接装python3对应的包就行)
2. 用QtDesigner搞定两个界面
你已经会把.ui转成.py了,这里补充下两个界面的设计要点:
- 主窗口(MainWindow):拖一个
QLabel(用来显示后续从对话框获取的内容)和一个QPushButton(比如把按钮文本改成"打开输入框") - 对话框窗口(Dialog):拖一个
QSpinBox(微调框,可以在属性面板里设置数值范围,比如0-100),再拖两个按钮分别做"确定"和"取消"
设计完分别保存成main_window.ui和input_dialog.ui,然后转成py文件:pyuic5 -x main_window.ui -o main_window.pypyuic5 input_dialog.ui -o input_dialog.py
(主窗口加-x是方便直接测试,对话框不需要,因为它是被主窗口调用的)
3. 编写核心逻辑代码
直接修改pyuic生成的文件不太好(重新设计UI会覆盖),所以咱们新建一个main.py来整合逻辑:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog from PyQt5.QtCore import Qt from main_window import Ui_MainWindow from input_dialog import Ui_Dialog class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) # 把按钮点击事件绑定到自定义函数 self.pushButton.clicked.connect(self.open_input_dialog) def open_input_dialog(self): # 创建对话框实例 dialog = InputDialog() # 显示对话框,等待用户操作 if dialog.exec_() == QDialog.Accepted: # 获取微调框的值,更新主窗口的标签 selected_value = dialog.spinBox.value() self.label.setText(f"你选择的数值是:{selected_value}") class InputDialog(QDialog, Ui_Dialog): def __init__(self): super().__init__() self.setupUi(self) # 绑定确定/取消按钮的事件 self.pushButton_ok.clicked.connect(self.accept) self.pushButton_cancel.clicked.connect(self.reject) if __name__ == "__main__": app = QApplication(sys.argv) # 针对触摸屏幕优化,让控件显示更适配 app.setAttribute(Qt.AA_EnableHighDpiScaling) main_win = MainWindow() # 要是想全屏显示(更适合触摸),就把下面这行注释打开 # main_win.showFullScreen() main_win.show() sys.exit(app.exec_())
几个要注意的小细节:
- 代码里的控件名字要和QtDesigner里的一致,比如你把主窗口的按钮命名成
btn_open_dialog,那代码里就要改成self.btn_open_dialog.clicked.connect(...) - 触摸屏的话,建议在QtDesigner里把控件的
minimumSize调大一点,比如按钮设成80x40,这样触摸起来更顺手 - 可以给微调框设默认值,要么在QtDesigner里改
value属性,要么在代码里加self.spinBox.setValue(50)
4. 运行程序
在LXTerminal里输入这条命令启动:python3 main.py
点击主窗口的按钮,就能弹出对话框,调整微调框后点确定,主窗口的标签就会显示你选的数值啦~
内容的提问来源于stack exchange,提问作者RaspiManu
相关产品推荐
相关产品推荐

