簡體   English   中英

在mainWindow中打開Python PyQT5打開小部件

[英]Python PyQT5 open widget in mainWindow

我正在構建的應用程序確實可以通過Rasbperry PI LCD屏幕控制我的智能家居,但我只是從Python開始,而GUI卻存在一些問題。 我想要一個主窗口,並從相同和不同的類打開窗口小部件。 當我直接將opcject放在主python文件上(主文件中有很多類和def)時,它的工作正常,但是當我使用QDesigner ui文件轉換為py文件時,小部件作為新窗口啟動,而不是主窗口的一部分。 你能幫我嗎? 主類Sterowanie中的功能strona_glowna啟動主窗口的GUI,strona_pogoda啟動同一窗口上的Weather小部件,但是當我啟動strona_temperatura時,就是這樣,但是在新窗口中,我不想要那個。 有什么線索嗎? 這是代碼:

from strona_temperatury import Ui_Strona_temperatury    
class Sterowanie(QMainWindow):
    pobierz_mowa = pyqtSignal(str)

    def __init__(self):
        super().__init__()

        self._thread = QThread()
        self._threaded = Threaded(result=self.mowa_tekst)
        self.pobierz_mowa.connect(self._threaded.mowa)
        self._thread.started.connect(self._threaded.start)
        self._threaded.moveToThread(self._thread)
        qApp.aboutToQuit.connect(self._thread.quit)
        self._thread.start()

        self.setStyleSheet(appStyle)
        self.top = 0
        self.left = 0
        self.width = 1024
        self.height = 600
        self.setGeometry(self.left, self.top, self.width, self.height)
        #self.setCentralWidget(self)
        self.lb_mowa = QLabel("Rozpoznanie mowy:", self)
        self.lb_mowa.move(100, 300)
        self.lb_mowa2 = QLabel("...", self)
        self.lb_mowa2.resize(100, 100)
        self.lb_mowa2.move(100, 400)
        self.strona_glowna()
        self.mowa_sprawdz()

    @pyqtSlot()
    def mowa_sprawdz(self):
        self.pobierz_mowa.emit("test")


    @pyqtSlot(str)
    def mowa_tekst(self, odpowiedz):
        self.mowa_dzialanie(str(odpowiedz))
        self.lb_mowa2.setText(str(odpowiedz))

    def mowa_dzialanie(self,odpowiedz):
        if(odpowiedz=="pogoda"):
            self.strona_pogoda()
        elif(odpowiedz=="opcje"):
            self.strona_opcje()
        elif (odpowiedz == "zdjęcia"):
            self.strona_zdjecia()
        elif (odpowiedz == "temperatura"):
            self.strona_temperatury()
        elif (odpowiedz == "zamówienia"):
            self.strona_zamowienia()
        elif (odpowiedz == "główna"):
            self.strona_glowna()
        elif (odpowiedz == "zegar"):
            self.strona_zegar()


    #Working Fine, if opens in main window
    def strona_glowna(self):
        self.glowna = Strona_glowna(self)
        self.setWindowTitle("Strona główna")
        self.setCentralWidget(self.glowna)
        self.glowna.bt_temperatura.clicked.connect(self.strona_temperatury)
        self.glowna.bt_koniec.clicked.connect(self.koniec_aplikacji)
        self.glowna.bt_pogoda.clicked.connect(self.strona_pogoda)
        self.glowna.bt_zamowienia.clicked.connect(self.strona_zamowienia)
        self.glowna.bt_opcje.clicked.connect(self.strona_opcje)
        self.glowna.bt_zdjecia.clicked.connect(self.strona_zdjecia)
        self.glowna.bt_zegar.clicked.connect(self.strona_zegar)
        self.mowa_sprawdz()
        self.show()

    # not ok, opens in new window
    def strona_temperatury(self):
        self.temperatury = Strona_temperatury(self)
        self.setWindowTitle("Temperatury")
        self.setCentralWidget(self.temperatury)
        self.mowa_sprawdz()
        self.show()

    #ok, open in main window
    def strona_pogoda(self):
        self.pogoda=Strona_pogoda(self)
        self.setWindowTitle("Pogoda")
        self.setCentralWidget(self.pogoda)
        self.pogoda.bt_interfejs.clicked.connect(self.strona_glowna)
        self.pogoda.bt_koniec.clicked.connect(self.koniec_aplikacji)
        self.mowa_sprawdz()
        self.show()

在同一文件中有類

class Strona_pogoda(QWidget):
def __init__(self, parent=None):
    super(Strona_pogoda, self).__init__(parent)
    #godka.powiedz("Pogoda")
    self.lb_czas = QLabel("Pogoda", self)
    self.lb_czas.resize(200, 100)
    self.bt_koniec = QPushButton("Koniec", self)
    self.bt_interfejs = QPushButton("Strona główna", self)
    self.bt_koniec.move(100, 20)
    self.bt_interfejs.move(100, 80)

class Strona_temperatury(QWidget):
def __init__(self,parrent=None):
    super(Strona_temperatury, self).__init__(parrent)
    #https://stackoverflow.com/questions/39819700/replacing-the-existing-mainwindow-with-a-new-window-with-python-pyqt-qt-design
    #https://stackoverflow.com/questions/44802242/properly-use-ui-with-pyqt5
    self.ui = Ui_Strona_temperatury()
    self.ui.setupUi(self)
    self.st_glowna=Sterowanie()
    self.ui.pushButton.clicked.connect(self.st_glowna.strona_glowna)

class Strona_glowna(QWidget):
    def __init__(self, parent=None):
        super(Strona_glowna, self).__init__(parent)
        self.bt_koniec = QPushButton("Koniec", self)
        self.bt_strona_glowna = QPushButton("Strona główna", self)
        self.bt_temperatura = QPushButton("Temperatury", self)
        self.bt_pogoda = QPushButton("Pogoda", self)
        self.bt_zamowienia = QPushButton("Zamówienia", self)
        self.bt_opcje = QPushButton("Opcje", self)
        self.bt_zdjecia = QPushButton("Zdjecia", self)
        self.bt_zegar = QPushButton("Zegar", self)
        self.bt_radio = QPushButton("Radio", self)
        self.bt_oswietlenie = QPushButton("Oświetlenie", self)
        self.bt_koniec.move(920, 550)
        self.bt_strona_glowna.move(10, 20)
        self.bt_temperatura.move(100, 20)
        self.bt_pogoda.move(200, 20)
        self.bt_zamowienia.move(300, 20)
        self.bt_opcje.move(400, 20)
        self.bt_zdjecia.move(500, 20)
        self.bt_zegar.move(600, 20)
        self.bt_radio.move(700, 20)
        self.bt_oswietlenie.move(800, 20)
        self.lb_czas=QLabel("czas", self)
        self.lb_czas.resize(200, 100)
        self.lb_czas.move(300, 70)


        self.timer=QTimer(self)
        #godka.powiedz("Strona główna")
        self.czas_update()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.czas_update)
        self.timer.start()


    def czas_update(self):
        self.lb_czas.setText(QDateTime.currentDateTime().toString("HH:mm:ss"))

和用戶界面(在Qdesiner中創建並轉換為py)

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Strona_temperatury(object):

    def setupUi(self, Ui_Strona_temperatury):
        Ui_Strona_temperatury.setObjectName("Ui_Strona_temperatury")
        #Ui_Strona_temperatury.resize(449, 322)
        self.gridLayoutWidget = QtWidgets.QWidget(Ui_Strona_temperatury)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 421, 271))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.label_5 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_5.setObjectName("label_5")
        self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1)
        self.label_6 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_6.setObjectName("label_6")
        self.gridLayout.addWidget(self.label_6, 4, 0, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 2, 0, 1, 1)
        self.lb_biuro = QtWidgets.QLabel(self.gridLayoutWidget)
        self.lb_biuro.setObjectName("lb_biuro")
        self.gridLayout.addWidget(self.lb_biuro, 0, 0, 1, 1)
        self.label = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 6, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 7, 0, 1, 1)
        self.label_7 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_7.setObjectName("label_7")
        self.gridLayout.addWidget(self.label_7, 5, 0, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
        self.label_12 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_12.setObjectName("label_12")
        self.gridLayout.addWidget(self.label_12, 12, 0, 1, 1)
        self.label_10 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_10.setObjectName("label_10")
        self.gridLayout.addWidget(self.label_10, 10, 0, 1, 1)
        self.label_8 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_8.setObjectName("label_8")
        self.gridLayout.addWidget(self.label_8, 8, 0, 1, 1)
        self.label_11 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_11.setObjectName("label_11")
        self.gridLayout.addWidget(self.label_11, 11, 0, 1, 1)
        self.label_9 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_9.setObjectName("label_9")
        self.gridLayout.addWidget(self.label_9, 9, 0, 1, 1)
        self.lb_temp_biuro2 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.lb_temp_biuro2.setObjectName("lb_temp_biuro2")
        self.gridLayout.addWidget(self.lb_temp_biuro2, 0, 1, 1, 1)
        self.lb_temp_salon2 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.lb_temp_salon2.setObjectName("lb_temp_salon2")
        self.gridLayout.addWidget(self.lb_temp_salon2, 1, 1, 1, 1)
        self.label_15 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_15.setObjectName("label_15")
        self.gridLayout.addWidget(self.label_15, 2, 1, 1, 1)
        self.label_16 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_16.setObjectName("label_16")
        self.gridLayout.addWidget(self.label_16, 3, 1, 1, 1)
        self.label_17 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_17.setObjectName("label_17")
        self.gridLayout.addWidget(self.label_17, 4, 1, 1, 1)
        self.label_18 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_18.setObjectName("label_18")
        self.gridLayout.addWidget(self.label_18, 5, 1, 1, 1)
        self.label_19 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_19.setObjectName("label_19")
        self.gridLayout.addWidget(self.label_19, 6, 1, 1, 1)
        self.label_20 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_20.setObjectName("label_20")
        self.gridLayout.addWidget(self.label_20, 7, 1, 1, 1)
        self.label_21 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_21.setObjectName("label_21")
        self.gridLayout.addWidget(self.label_21, 8, 1, 1, 1)
        self.label_22 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_22.setObjectName("label_22")
        self.gridLayout.addWidget(self.label_22, 9, 1, 1, 1)
        self.label_23 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_23.setObjectName("label_23")
        self.gridLayout.addWidget(self.label_23, 10, 1, 1, 1)
        self.label_24 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_24.setObjectName("label_24")
        self.gridLayout.addWidget(self.label_24, 11, 1, 1, 1)
        self.label_25 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_25.setObjectName("label_25")
        self.gridLayout.addWidget(self.label_25, 12, 1, 1, 1)
        self.pushButton = QtWidgets.QPushButton(Ui_Strona_temperatury)
        self.pushButton.setGeometry(QtCore.QRect(10, 290, 419, 23))
        self.pushButton.setAutoFillBackground(False)
        self.pushButton.setStyleSheet("color: red; background-color: black")
        self.pushButton.setCheckable(False)
        self.pushButton.setAutoDefault(False)
        self.pushButton.setDefault(False)
        self.pushButton.setFlat(False)
        self.pushButton.setObjectName("pushButton")

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

    def retranslateUi(self, Ui_Strona_temperatury):
        _translate = QtCore.QCoreApplication.translate
        #Ui_Strona_temperatury.setWindowTitle(_translate("Form", "Form"))
        self.label_5.setText(_translate("Form", "Kuchnia"))
        self.label_6.setText(_translate("Form", "WC Parter"))
        self.label_4.setText(_translate("Form", "Jadalnia"))
        self.lb_biuro.setText(_translate("Form", "Biuro"))
        self.label.setText(_translate("Form", "Taras (na zewnatrz)"))
        self.label_2.setText(_translate("Form", "Pokój teściowej"))
        self.label_7.setText(_translate("Form", "Wejscie Główne"))
        self.label_3.setText(_translate("Form", "Salon( Taras )"))
        self.label_12.setText(_translate("Form", "Klatka schodowa"))
        self.label_10.setText(_translate("Form", "Sypialnia"))
        self.label_8.setText(_translate("Form", "WC Piętro"))
        self.label_11.setText(_translate("Form", "Przysienek"))
        self.label_9.setText(_translate("Form", "Pokój Lilki"))
        self.lb_temp_biuro2.setText(_translate("Form", "TextLabel"))
        self.lb_temp_salon2.setText(_translate("Form", "TextLabel"))
        self.label_15.setText(_translate("Form", "TextLabel"))
        self.label_16.setText(_translate("Form", "TextLabel"))
        self.label_17.setText(_translate("Form", "TextLabel"))
        self.label_18.setText(_translate("Form", "TextLabel"))
        self.label_19.setText(_translate("Form", "TextLabel"))
        self.label_20.setText(_translate("Form", "TextLabel"))
        self.label_21.setText(_translate("Form", "TextLabel"))
        self.label_22.setText(_translate("Form", "TextLabel"))
        self.label_23.setText(_translate("Form", "TextLabel"))
        self.label_24.setText(_translate("Form", "TextLabel"))
        self.label_25.setText(_translate("Form", "TextLabel"))
        self.pushButton.setText(_translate("Form", "PushButton"))

不要直接使用或修改QDesigner生成的文件,而是從它們繼承。

例如,要使用Ui_Strona_temperatury創建一個小部件,如下所示:

class StronaTemperatury(Ui_Strona_temperatury, QMainWindow):
    def __init__(self):
        Ui_Strona_temperatury.__init__(self)
        QMainWindow.__init__(self)

        self.setupUi(self)

        [...]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM