【发布时间】:2020-08-12 12:16:01
【问题描述】:
我有一个带有两个选项卡的界面:在第一个选项卡中,我要求用户输入参数,在第二个选项卡中,我想打印以下 QTableWidget。
所以基本上在第一个选项卡上我有一个 QPushButton,我称之为进程,通常,当我按下它时,我想将信息发送到第二个选项卡。
现在我只是尝试用 QTableWidget 和良好的参数显示一个新窗口:
class Parameters(QWidget):
def __init__(self):
super(Parameters, self).__init__()
self.matrixsize = QLineEdit()
bouton = QPushButton("define matrix_size")
bouton.clicked.connect(self.appui_bouton)
self.halfmatrix = QCheckBox()
self.halfmatrix.toggled.connect(self.on_checked)
self.define_matrix_size = QGroupBox('Define Parameters')
layout = QGridLayout()
layout.addWidget(self.matrixsize, 0, 0, 1, 1, )
layout.addWidget(bouton, 0, 1, 1, 1)
layout.addWidget(QLabel('select half size mode'
), 1, 0, 1, 1)
layout.addWidget(self.halfmatrix, 1, 1, 1, 1)
self.define_matrix_size.setLayout(layout)
process = QPushButton('process')
process.clicked.connect(self.process)
self.matrix = QTableWidget()
self.layout = QGridLayout()
self.layout.addWidget(self.define_matrix_size)
self.layout.addWidget(matrix)
self.layout.addWidget(process)
self.setLayout(self.layout)
def matrix_size(self):
if self.matrixsize.text() == "":
return 0
else:
return int(self.matrixsize.text())
def appui_bouton(self):
taille = self.matrixsize()
self.matrix.deleteLater()
if self.halfmatrix.isChecked():
self.on_checked()
else:
self.matrix = QTableWidget()
self.matrix.setColumnCount(taille)
self.matrix.setRowCount(taille)
self.layout.addWidget(self.matrix)
self.update()
self.setLayout(self.layout)
def keyPressEvent(self, qKeyEvent):
print(qKeyEvent.key())
if qKeyEvent.key() == Qt.Key_Return or qKeyEvent.key() == Qt.Key_Enter:
self.appui_bouton()
else:
super().keyPressEvent(qKeyEvent)
def on_checked(self):
taille = self.matrixsize()
if taille == 0:
pass
else:
if self.halfmatrix.isChecked():
size = int(taille / 2)
self.matrix.deleteLater()
self.matrix = QTableWidget()
self.matrix.setColumnCount(size)
self.matrix.setRowCount(size)
self.layout.addWidget(self.matrix, 3, 0, 20, 4)
self.update()
self.setLayout(self.layout)
else:
self.appui_bouton()
def process (self):
layout = QHBoxLayout()
test = self.matrix
test.setLayout(layout)
test.show()
所以为了澄清我所说的:我有一个窗口,您可以在其中获取一些参数 (size,...) ,当您选择这些参数时,假设您采用 matrixsize==5,那么 5x5 表是添加到窗口。此表可以在此填充后由其他参数(我在代码上剪切它们)通过拖放系统进行。 所以现在我有了一个构建表,我希望能够通过单击“进程”按钮打开一个只包含表的新窗口。 所以我不想要一个动态表,我只想要一个保持相同属性的表(例如,如果矩阵启用了 Dragonly,那么新矩阵应该具有相同的属性)。我想保留单元格中包含的所有信息
我希望我足够清楚这是我第一次提问(当然是在多次阅读一些答案之后^^) 感谢您的回答和建议!
【问题讨论】:
-
你的意思是
process中的表格应该根据矩阵大小来创建行和列吗? -
不,我的意思是:在第一个选项卡中,我可以创建一个包含所需行数的表格(我断言它是一个正方形)。我可以用我想要的任何东西来填充它。我想要的是,当我单击“进程”时,会出现一个带有同一张表的新窗口。 (这是我想要跨过的第一步,之后,我希望单击进程创建一个新窗口,该窗口具有相同的表,并基于数据函数进行演变)。我希望我更清楚
-
第一个答案发错了,我更正了,现在清楚了吗?
-
嗯,这部分取决于你要对“新”表做什么:它应该是可编辑的吗?编辑后的数据是否应该与原始表动态同步?此外,您的示例不可重现,它缺少您要连接的两个函数(
appui_bouton和on_checked),并且没有关于实际应用表大小的任何痕迹。请编辑问题并使其代码可重现,包括设置表格大小所需的所有功能。 -
通常这样,它回答了你提出的问题@musicamante
标签: python pyqt5 qtablewidget qpushbutton qtabwidget