PyQt5对话框窗口打开时没有布局

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt5对话框窗口打开时没有布局相关的知识,希望对你有一定的参考价值。

当我从主窗口(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

它看起来像这样:

正确的对话框布局

我错过了什么?

答案

当您在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()方法,因为此方法负责填充窗口小部件,通过调用它2次,您将不必要地添加更多窗口小部件:

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

以上是关于PyQt5对话框窗口打开时没有布局的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 GUI 仅在单击屏幕并重新打开时更新

从 catch 块打开时无法关闭 jQuery UI 对话框

PyQt5学习--基本窗口控件--QMainWindow

使用Alertdialog更改后面的文本视图

pyqt5-基本窗口控件

重新打开时 JQuery UI 对话框没有正确调整大小?