打印但不setText

时间:2019-07-09 09:18:21

标签: python-3.x pyqt5

在我的问题中,我有2个窗口。我将条目放在第一个表中,并将其显示在第二个表中。表格中有2栏。第一个用于window2中的组合框。第二个是我要显示的(如果在组合框中选择了第1行,则打印第1行(第2列);如果在组合框中选择了第2行,则打印第2行(第2列))

我没有任何错误消息或任何东西,我可以打印正确的文本,但是以某种方式,我不能将il(settext)标记为我的错误的任何构想?

import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import QTableWidgetItem, QComboBox
from PyQt5.QtWidgets import QApplication, QPushButton, QDialog, QGroupBox,QVBoxLayout, QGridLayout, QLabel, QTableWidget, QScrollArea


class Window(QDialog):

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

        self.title = "XXXX"
        self.top = 50
        self.left = 50
        self.width = 1250
        self.height = 650
        self.setStyleSheet("background-color:white")
        self.InitWindow()


    def InitWindow(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        groupBox = QGroupBox()
        gridLayout = QGridLayout()


        #TABLEAU
        Window.table10 = QTableWidget(self)
        Window.table10.setRowCount(3)     # set row count
        Window.table10.setColumnCount(2)  # set column count
        Window.table10.setMaximumHeight(250)
        #entête
        Window.table10.setItem(0,0, QTableWidgetItem("Equipement"))
        Window.table10.setItem(0,1, QTableWidgetItem("Value"))
        gridLayout.addWidget(Window.table10, 1 , 2 , 3, 6)


        button11 = QPushButton("générer le profil de charge",self)
        button11.setStyleSheet("background-color:rgb(2,154,132); color: white") 
        button11.setMinimumHeight(20)
        button11.setMinimumWidth(80)
        button11.clicked.connect(self.charge)
        gridLayout.addWidget(button11, 5 , 1)


        groupBox.setLayout(gridLayout)
        scroll = QScrollArea()
        scroll.setWidget(groupBox)
        scroll.setWidgetResizable(True)

        vbox = QVBoxLayout()
        vbox.addWidget(scroll)

        self.setLayout(vbox)
        self.show()
    def charge(self):
        """Lance la 2ème fenêtre en cas de clic sur le bouton
        """
        # crée la 2ème fenêtre
        self.profilcharge = ProfilCharge()
        # rend modale la 2ème fenêtre (la 1ère fenêtre sera inactive)
        self.profilcharge.setWindowModality(QtCore.Qt.ApplicationModal)
        # affiche la 2ème fenêtre
        self.profilcharge.show()



class ProfilCharge(Window):
        # crée un signal pour envoyer une chaine à la fermeture de la fenêtre
    fermetureprofilcharge = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super().__init__()

        self.title = "profil de charge"
        self.top = 50
        self.left = 50
        self.width = 300
        self.height = 400
        self.InitWindow()

    def InitWindow(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        groupBox = QGroupBox()
        self.gridLayout = QGridLayout()


        self.label1 = QLabel("chose an equipment",self)
        self.gridLayout.addWidget(self.label1, 2 , 1)

        self.combo = QComboBox()

        i=1
        while (i<Window.table10.rowCount()):
            self.combo.addItem(str(Window.table10.item(i,0).text()),i)
            i=i+1
        self.gridLayout.addWidget(self.combo, 0 , 1 )    
        self.combo.activated[str].connect(self.nbheures)   



        groupBox.setLayout(self.gridLayout)
        scroll = QScrollArea()
        scroll.setWidget(groupBox)
        scroll.setWidgetResizable(True)

        vbox = QVBoxLayout()
        vbox.addWidget(scroll)

        self.setLayout(vbox)
        self.show()

    def nbheures(self,text):
        for i in range(Window.table10.rowCount()):
            if text == str(Window.table10.item(i,0).text()):

                value=str(Window.table10.item(i,1).text())
                break

        print(value)
        self.label1.setText(value)




if __name__ =="__main__":   
    App = QApplication(sys.argv)
    App.aboutToQuit.connect(App.deleteLater)
    window = Window()
    App.exec()

1 个答案:

答案 0 :(得分:0)

您两次致电self.InitWindow()Window.__init__中一个,ProfilCharge.__init__中一个)。第二次,您尝试为已经具有布局的窗口小部件设置新的布局,并且该操作被丢弃。

第二次更改self.label1的当前值。但是,当您仍然看到标签的第一个实例时,就不会看到任何更改。

ProfilCharge不应从Window继承。