【问题标题】:PyQt5 Dialog window opens without layoutPyQt5 Dialog 窗口打开时没有布局
【发布时间】:2017-12-18 07:36:38
【问题描述】:

当我从主窗口 (QMainWindow) 中加载对话框 (QMainWindow) 窗口时,即使调用了 setupUi() 函数,它也会在没有布局的情况下加载。

重要的代码片段在下面,click here 用于 pastebin 链接到完整代码

class Ui_Dialog(QMainWindow):
    def __init__(self, parent=None):
        super(Ui_Dialog, self).__init__(parent)
        self.setupUi(self)
    def setupUi(self, Dialog):
        ...

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.show()
        ....
    def setupUi(self, Form):
        ...
        self.auto_sap_btn = QPushButton(Form)
        self.auto_sap_btn.setGeometry(QRect(0, 0, 61, 25))
        self.auto_sap_btn.setObjectName('auto_sap_btn')
        self.auto_sap_btn.clicked.connect(self.openDialog)

    def openDialog(self):
        self.window = Ui_Dialog(self)
        self.window.setupUi(self.window)
        self.window.move(600, 500)
        self.window.show()

现在我的对话框如下所示:

对话框布局失败

当我从它自己的脚本中加载对话框时:

pyuic5 -x dialog.ui -o dialog.py

看起来像这样:

正确的对话框布局

我错过了什么?

【问题讨论】:

    标签: layout dialog pyqt5 python-3.6


    【解决方案1】:

    当您在 Qt Designer 中基于模板创建设计时,当您必须传递适当的小部件时,当您创建 Ui_Dialog 时,您肯定使用了Dialog with Buttons Right,因此在这种情况下您应该使用 QDialog 而不是 QMainWindow:

    class Ui_Dialog(QDialog): # change QMainWindow to QDialog
        def __init__(self, parent=None):
            super(Ui_Dialog, self).__init__(parent)
            self.setupUi(self)
            [...]
    

    另一个错误是第二次使用setupUi() 方法,因为该方法负责填充小部件,调用它两次您将不必要地添加更多小部件:

    def openDialog(self):
        self.window = Ui_Dialog(self)
        self.window.move(600, 500)
        self.window.show()
    

    【讨论】:

    • 你完全正确。我完全错过了第二次运行 setupUi。我按照本教程(youtube.com/watch?v=dRRpbDFnMHI)进行了操作,他使用了 QMainWindow,但是在将其更改为 QDialog 之后,它就像一个魅力。感谢您的帮助!
    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 2018-05-16
    • 2021-10-10
    • 1970-01-01
    • 2018-10-19
    • 2020-05-18
    • 2019-04-12
    • 2017-07-13
    相关资源
    最近更新 更多