首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:从PyQt5 UI代码中分离代码

Python:从PyQt5 UI代码中分离代码
EN

Stack Overflow用户
提问于 2018-04-15 23:03:03
回答 1查看 304关注 0票数 0

我正在用PyQt5做我的第一步。我创建了一个简单的对话框"form_main“,其中只有一个菜单:”File“:

代码语言:javascript
复制
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction
from PyQt5.QtGui import QIcon

class GUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('MyApp')
        self.resize(400, 300)
        self.statusBar().showMessage('Welcome')
        self.add_menus()

    def add_menus(self):
        menubar = self.menuBar()
        file_menu = menubar.addMenu('&File')

        exit_action = QAction('&Quit', self)
        file_menu.addAction(exit_action) 

现在我想从另一个类访问这段代码。在这个类中,我想要定义一个函数,当我点击“File”时会调用这个函数。在第二个文件中,我写道:

代码语言:javascript
复制
from frm_main import GUI
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication

def exit_action():
    self.close

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = GUI()
    # ui.exit_action.triggered.connect(exit_action)
    ui.show()
    sys.exit(app.exec_())

这段代码正确地显示了我的对话框,但是当我移除注释时,当我尝试将“File”菜单与函数exit_action链接起来时,它就会中断。

有什么提示吗?我如何将菜单连接到函数上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-15 23:13:14

您的代码有以下错误:

  • 只有属性可以从类外部访问,在您的例子中,exit_action不是,为了成为一个属性,您必须在它之前使用self。
  • 在函数exit_action未定义self的情况下,在类中,每个方法的第一个属性是实例,按照惯例,实例被命名为self,在这种情况下,exit_action应该是小部件,因此我们可以使用lambda函数,但您也必须使用括号调用close函数。

frm_main.py

代码语言:javascript
复制
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction
from PyQt5.QtGui import QIcon

class GUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('MyApp')
        self.resize(400, 300)
        self.statusBar().showMessage('Welcome')
        self.add_menus()

    def add_menus(self):
        menubar = self.menuBar()
        file_menu = menubar.addMenu('&File')

        self.exit_action = QAction('&Quit', self)
        file_menu.addAction(self.exit_action) 

main.py

代码语言:javascript
复制
from frm_main import GUI
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication

def exit_action(widget):
    widget.close()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = GUI()
    ui.exit_action.triggered.connect(lambda: exit_action(ui))
    ui.show()
    sys.exit(app.exec_())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49847633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档