【问题标题】:How do i call widgets correctly in PyQt5?如何在 PyQt5 中正确调用小部件?
【发布时间】:2015-04-23 17:51:06
【问题描述】:

我正在使用 PyQt5 和 Qt Designer 创建 UI。加载 *.ui 文件后,我可以以不同的方式调用小部件。我在 Qt Designer 中定义了两个 pushButton 对象,名称为 ButtonBrowse 和 ButtonDoit。

class Dialogo(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui=uic.loadUi("UserInterfaces/QtGUI1_2.ui",self)

        self.ui.ButtonBrowse.clicked.connect(self.load_file)
        self.ButtonDoit.clicked.connect(self.doit)

我想知道为什么 ButtonDoit 可以工作,因为我没有在 self 和 ButtonDoit 之间使用 ui?我这样做会不会有什么麻烦?

我猜正确的方法是用于 ButtonBrowse 的那一种?

谢谢, 亚历克斯

【问题讨论】:

    标签: user-interface qt-designer pyqt5


    【解决方案1】:

    uic.loadUi 的第二个参数是可选的,它采用来自 Qt Designer 的顶级类的实例(在您的示例中为 QMainWindow)。

    如果您使用第二个参数,则会创建一个全新的 ui 实例,并且返回的对象类型为 QMainWindow

    如果您使用,Qt Designer 中的所有小部件(除了顶级小部件)都将添加到传入的实例中,并且返回的对象类型为@987654325 @(即它与传入的对象完全相同)。

    所以self.ui 在您的示例中是多余的,因为它只会设置为self。您需要做的就是:

    class Dialogo(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
            uic.loadUi("UserInterfaces/QtGUI1_2.ui", self)
            self.ButtonBrowse.clicked.connect(self.load_file)
            self.ButtonDoit.clicked.connect(self.doit)
    

    【讨论】:

    • 谢谢,我想我明白了!
    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多