无法在PyQt5的主窗口上打开QtDesigner创建的定制小部件

问题描述 投票:0回答:1

我一直在尝试获取使用QtDesigner创建的窗口小部件以显示在主窗口(我也使用QtDesigner创建的窗口)上,但无法执行。我一直在研究如何执行此操作,但尚未找到适合我的代码的解决方案。我创建了一个类,以继承QtDesigner的Ui生成的代码,如下所示。

我尝试创建对象QtWidget.QGridLayout,然后将小部件添加到布局中,但是当我打开主窗口时,它仍然不显示小部件。这是因为我在小部件代码下创建了一个类吗?该类应该显示当前日期和时间,并显示运行时间,因此我使用QTimer函数创建了一个类。我有什么方法可以使用QtDesigner生成的代码来工作,而又不创建新类?推荐吗?我之所以问是因为我不熟悉编程,因此对类的工作方式并不熟悉。

在小部件中,

class Ui_widget_currentDate_digitalClock(object):
    def setupUi(self, widget_currentDate_digitalClock):
        widget_currentDate_digitalClock.setObjectName("widget_currentDate_digitalClock")
        widget_currentDate_digitalClock.resize(631, 170)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(widget_currentDate_digitalClock.sizePolicy().hasHeightForWidth())
        widget_currentDate_digitalClock.setSizePolicy(sizePolicy)
        self.verticalLayout = QtWidgets.QVBoxLayout(widget_currentDate_digitalClock)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label_CurrentDate = QtWidgets.QLabel(widget_currentDate_digitalClock)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_CurrentDate.sizePolicy().hasHeightForWidth())
        self.label_CurrentDate.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setFamily("Palatino Linotype")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.label_CurrentDate.setFont(font)
        self.label_CurrentDate.setAlignment(QtCore.Qt.AlignCenter)
        self.label_CurrentDate.setObjectName("label_CurrentDate")
        self.verticalLayout.addWidget(self.label_CurrentDate)
        self.label_DigitalClock = QtWidgets.QLabel(widget_currentDate_digitalClock)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_DigitalClock.sizePolicy().hasHeightForWidth())
        self.label_DigitalClock.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setFamily("Palatino Linotype")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.label_DigitalClock.setFont(font)
        self.label_DigitalClock.setAlignment(QtCore.Qt.AlignCenter)
        self.label_DigitalClock.setObjectName("label_DigitalClock")
        self.verticalLayout.addWidget(self.label_DigitalClock)

        self.retranslateUi(widget_currentDate_digitalClock)
        QtCore.QMetaObject.connectSlotsByName(widget_currentDate_digitalClock)

    def retranslateUi(self, widget_currentDate_digitalClock):
        _translate = QtCore.QCoreApplication.translate
        widget_currentDate_digitalClock.setWindowTitle(_translate("widget_currentDate_digitalClock", "Canteen System"))
        self.label_CurrentDate.setText(_translate("widget_currentDate_digitalClock", "Current Date"))
        self.label_DigitalClock.setText(_translate("widget_currentDate_digitalClock", "Current Time"))

class OpenDTWidget(QtWidgets.QWidget, Ui_widget_currentDate_digitalClock):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)
        timer = QtCore.QTimer(self)
        timer.timeout.connect(self.showDate)
        timer.timeout.connect(self.showTime)
        timer.start(100)
    def showDate(self):
        date = QtCore.QDate.currentDate()
        textDate = date.toString("dddd, dd MMMM, yyyy")
        self.label_CurrentDate.setText(textDate)
    def showTime(self):
        time = QtCore.QTime.currentTime()
        textTime = time.toString('hh:mm:ss')
        self.label_DigitalClock.setText(textTime)

在主窗口中,>

from DTWidget import OpenDTWidget
class OpenMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.transformedUi(self)

    def transformedUi(self, MainWindow):
        super(OpenMainWindow, self).setupUi(MainWindow)
        self.OpenDtWidget = OpenDTWidget()
        self.OpenDtWidget.setGeometry(QtCore.QRect(200, 200, 100, 100))
        self.OpenDtWidget.show()
if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = OpenMainWindow()
    MainWindow.show()
    sys.exit(app.exec_())

调用在小部件代码中创建的对象后,如何在我的主窗口中使用它,而不是在执行上述操作时如何自行打开新的小部件窗口?在哪里添加代码以实现我想要的?非常感谢您提供的任何帮助。非常感谢。

我一直在尝试获取使用QtDesigner创建的窗口小部件以显示在主窗口(我也使用QtDesigner创建的窗口)上,但无法执行。我一直在研究...

python pyqt pyqt5
1个回答
0
投票

没有父母的小部件是一个窗口。您需要添加父级self.OpenDtWidget = OpenDTWidget (self)

© www.soinside.com 2019 - 2024. All rights reserved.