【PyQt】QMainWindow类中关于点击不同菜单选项实现页面转换,经验细节

前言

  今天用PyQt给自己的程序写UI界面,想实现点击不同菜单选项转换到不同的界面。吃了没文化的亏,避免以后忘记,写出来给大家分享分享。

经验

   PyQt5.QtWidgets中有很多组件类,比如QMainWindowQWidgetQAction,可以用来创建主窗口(带菜单栏menubar)、窗口和动作。我想实现“点击菜单栏的某个菜单选项转换到不同界面”,不同界面可以使用QStackedWidget创建,而我在菜单和不同界面的连接上吃了亏。最后得出以下几条经验:
  (1)执行事件的函数有传入参数,连接的时候如果报错就用lambda

action.triggered.connect(self.display(1))
# 类似上面的如果报错,使用下面的两种方式
action.triggered.connect(lambda :self.display(1))
action.triggered.connect(self.display)

  (2)菜单栏中的菜单选项不能直接触发事件

self.menu_setting.triggered.connect(lambda :self.display(1))
self.menu_introduction.triggered.connect(lambda :self.display(0))
# 上面的语句不会报错,但是运行后点击菜单没任何反应,必须创建action,再将action绑定到menu

  (3)在自己定义的UI类中,创建的组件必须和self绑定才能有效果

action_m_i = QtWidgets.QAction('shuoming')
action_m_i.triggered.connect(lambda :self.display(0))
self.menu_introduction.addAction(action_m_i)

action_m_s = QtWidgets.QAction('shezhi')
action_m_s.triggered.connect(lambda :self.display(1))
self.menu_s
PyQt5 中,如果想要加载由 Qt Designer 设计好的 `.ui` 文件作为某个操作的响应结果(比如点击菜单栏中的“Save”按钮后显示一个自定义设计的保存窗口),可以按照以下步骤完成。 --- ### 具体实现流程 1. **创建 UI 文件** 使用 Qt Designer 工具制作你需要的设计界面并保存为 `save.ui` 文件。 2. **动态加载 .ui 文件** 利用 Python 提供的 `QUiLoader` 或者直接将 `.ui` 文件转换成对应的 Python 模块来加载它。 3. **关联菜单项的动作事件** 当用户点击菜单栏中的选项时,弹出自定义的窗口。这通常需要设置信号与槽机制来处理交互逻辑。 下面提供一段完整的代码示例帮助理解: ```python import sys from PyQt5.QtCore import QCoreApplication, QFile, QIODevice, QTextStream from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QPushButton, QMenuBar, QAction from PyQt5 import uic class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() # 初始化菜单栏以及绑定动作到特定功能上 menu_bar = self.menuBar() file_menu = menu_bar.addMenu("文件") action_save = QAction('保存', self) action_save.triggered.connect(self.openCustomDialog) # 绑定至openCustomDialog方法 file_menu.addAction(action_save) self.setWindowTitle('测试 - 自定义Save对话框') def openCustomDialog(self): """ 打开我们之前使用qt designer生成的 ui 界面 """ custom_ui_file_path = './save.ui' try: dialog_widget = uic.loadUi(custom_ui_file_path) if not isinstance(dialog_widget, QWidget): raise ValueError("loaded widget is invalid") # 显示自定义对话框,并进入模态模式等待关闭后再继续程序运行流。 dialog_widget.exec_() except Exception as e: print(f"Failed to load and display the .ui form: {e}") # 主入口点 if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.resize(640, 480) window.show() sys.exit(app.exec_()) ``` --- ### 注意事项 - 需确保已安装好相关的库支持如PyQt5及其工具包(pyqt-tools), 因为此处依赖了uic模块来进行即时解析`.ui`文件内容. - 将上述脚本中的相对路径改成实际存放你的`save.ui`的位置.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值