设计破碎以角化 PyQT5



我对此有点陌生,所以我基本上只是复制粘贴我所做的教程中的内容以使其工作。

我用QtDesigner制作了一个designer.ui文件,现在我把它导出到Python代码中。如果我使用 -x 命令然后运行设计 Python,它可以正常工作,但如果我将其导入另一个文件(以便我可以建立连接(,那么它都会压缩到 1 个位置,而不是坚持网格布局基础。

如果我启动我的 Main.py 文件(不是设计器代码(,那么我会收到错误QLayout: Attempting to add QLayout "" to MainWindow "MainWindow", which already has a layout但我看不到我在 Main 代码中添加布局的位置......

我的代码是:https://gist.github.com/crabcrabcam/3a6a9e847791117616d18ada0895f868

感谢您的任何帮助:)如果你需要更多的东西,就问吧。

导致此问题是因为QMainWindow类已经有一个布局,其中放置了QStatusBarQMenubar等。要自定义它,只需添加带有setCentralWidgetQWidget

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        w = QtWidgets.QWidget(MainWindow)
        MainWindow.setCentralWidget(w)
        self.gridLayout = QtWidgets.QGridLayout(w)
        self.gridLayout.setObjectName("gridLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.btnOpenFile = QtWidgets.QPushButton(MainWindow)
        self.btnOpenFile.setObjectName("btnOpenFile")
        self.horizontalLayout.addWidget(self.btnOpenFile)
        self.btnSaveFile = QtWidgets.QPushButton(MainWindow)
        self.btnSaveFile.setObjectName("btnSaveFile")
        self.horizontalLayout.addWidget(self.btnSaveFile)
        self.btnSendEmail = QtWidgets.QPushButton(MainWindow)
        self.btnSendEmail.setObjectName("btnSendEmail")
        self.horizontalLayout.addWidget(self.btnSendEmail)
        self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        self.txtEditMain = QtWidgets.QPlainTextEdit(MainWindow)
        self.txtEditMain.setObjectName("txtEditMain")
        self.gridLayout.addWidget(self.txtEditMain, 1, 0, 1, 1)
        self.btnClear = QtWidgets.QPushButton(MainWindow)
        self.btnClear.setObjectName("btnClear")
        self.gridLayout.addWidget(self.btnClear, 2, 0, 1, 1)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

另一个观察结果是,当您从类继承时,必须调用该类的构造函数。在您的情况下,您是从QMainWindow继承的,那么您应该调用QMainWindow构造函数而不是QWidget

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)

相关内容

  • 没有找到相关文章