前言
今天用PyQt给自己的程序写UI界面,想实现点击不同菜单选项转换到不同的界面。吃了没文化的亏,避免以后忘记,写出来给大家分享分享。
经验
PyQt5.QtWidgets
中有很多组件类,比如QMainWindow
、QWidget
、QAction
,可以用来创建主窗口(带菜单栏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