在我的问题中,我有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()
答案 0 :(得分:0)
您两次致电self.InitWindow()
(Window.__init__
中一个,ProfilCharge.__init__
中一个)。第二次,您尝试为已经具有布局的窗口小部件设置新的布局,并且该操作被丢弃。
第二次更改self.label1
的当前值。但是,当您仍然看到标签的第一个实例时,就不会看到任何更改。
ProfilCharge
不应从Window
继承。