gpt4 book ai didi

python - 是否可以将 QTableWidget 水平添加到布局中?

转载 作者:太空宇宙 更新时间:2023-11-03 18:24:47 29 4
gpt4 key购买 nike

我编写了一段代码来与分数表并排打印问题。但是,当尝试使用 QHBoxLayout (如果运行)显示表格时,不会显示表格,但不会显示错误。另一方面,当使用 QVBoxLayout 时,它会在我运行代码时显示。我是否可以将表格与问题/答案框并排(水平)呈现?拆分器可以作为替代方案吗?如果可以,我如何在代码中实现它?

我的代码如下:

import sys, os, random
from PyQt4 import QtCore, QtGui
StudentNames = []
StudentScores = []

class StartTest(QtGui.QMainWindow):
def __init__(self, questions, parent=None):
global StudentNames
global StudentScores
super(StartTest, self).__init__(parent)
self.stack = QtGui.QStackedWidget(self)
self.setCentralWidget(self.stack)
StudentNames.append('Hamzah Akhtar')
StudentNames.append('Bob Marley')
StudentNames.append('John Meadows')
StudentScores.append(int(0))
StudentScores.append(int(0))
StudentScores.append(int(0))
for index, question in enumerate(questions):
page = Question(question, self)
page.submit.clicked[()].connect(
lambda index=index: self.handleSubmit(index))
self.stack.addWidget(page)
self.answers = []

def handleSubmit(self, index):
page = self.stack.widget(index)
answer = page.answer.text()
# validate submitted answer...
self.answers.append(answer)
if index < self.stack.count() - 1:
self.stack.setCurrentIndex(index + 1)

class Question(QtGui.QWidget):
def __init__(self, question, parent=None):
global StudentNames
global StudentScores
super(Question, self).__init__(parent)
self.Table = QtGui.QTableWidget()
self.Table.setRowCount(3)
self.Table.setColumnCount(1)
self.Table.setVerticalHeaderLabels(StudentNames)
self.Table.setHorizontalHeaderLabels(['Scores'])
self.question = QtGui.QLabel(question, self)
self.answer = QtGui.QLineEdit(self)
self.submit = QtGui.QPushButton('Submit', self)
form = QtGui.QFormLayout()
form.addRow(self.question, self.answer)
layout = QtGui.QVBoxLayout(self)
layout.addLayout(form)
layout.addWidget(self.submit)
hlayout = QtGui.QHBoxLayout(self)
hlayout.addLayout(layout)
hlayout.addWidget(self.Table)
self.setLayout(hlayout)

if __name__ == '__main__':
User = ''
app = QtGui.QApplication([])
questions = [
'What is 5+5?',
'What is 45+10?',
'What is 28+47?',
'What is 22+13?',
]
window = StartTest(questions)
window.showFullScreen()
app.exec_()

最佳答案

您可以将占位符小部件设置为中央小部件。然后添加水平布局并将小部件添加到该布局。

centralWidget = QtGui.QWidget(self)
self.setCentralWidget(centralWidget)
mainLayout = QtGui.QHBoxLayout(centralWidget)
self.scoreTable = QtGui.QTableWidget(self)
self.scoreTable.setRowCount(len(StudentNames))
self.scoreTable.setColumnCount(1)
self.scoreTable.setVerticalHeaderLabels(StudentNames)
self.scoreTable.setHorizontalHeaderLabels(['Scores'])
for i, score in enumerate(StudentScores):
item = QtGui.QTableWidgetItem(str(score))
self.scoreTable.setItem(i, 0, item)

mainLayout.addWidget(self.stack)
mainLayout.addWidget(self.scoreTable)

完整示例:(使用 PySide 进行测试,但在 pyqt 中应该同样工作)

import sys, os, random
from PyQt4 import QtCore, QtGui
StudentNames = []
StudentScores = []

class StartTest(QtGui.QMainWindow):
def __init__(self, questions, parent=None):
global StudentNames
global StudentScores
super(StartTest, self).__init__(parent)

self.stack = QtGui.QStackedWidget(self)
StudentNames.append('Hamzah Akhtar')
StudentNames.append('Bob Marley')
StudentNames.append('John Meadows')
StudentScores.append(int(0))
StudentScores.append(int(0))
StudentScores.append(int(0))
for index, question in enumerate(questions):
page = Question(question, self)
page.submit.clicked[()].connect(
lambda index=index: self.handleSubmit(index))
self.stack.addWidget(page)
self.answers = []

centralWidget = QtGui.QWidget(self)
self.setCentralWidget(centralWidget)
mainLayout = QtGui.QHBoxLayout(centralWidget)
self.scoreTable = QtGui.QTableWidget(self)
self.scoreTable.setRowCount(len(StudentNames))
self.scoreTable.setColumnCount(1)
self.scoreTable.setVerticalHeaderLabels(StudentNames)
self.scoreTable.setHorizontalHeaderLabels(['Scores'])
for i, score in enumerate(StudentScores):
item = QtGui.QTableWidgetItem(str(score))
self.scoreTable.setItem(i, 0, item)

mainLayout.addWidget(self.stack)
mainLayout.addWidget(self.scoreTable)

def handleSubmit(self, index):
page = self.stack.widget(index)
answer = page.answer.text()
# validate submitted answer...
self.answers.append(answer)
if index < self.stack.count() - 1:
self.stack.setCurrentIndex(index + 1)

class Question(QtGui.QWidget):
def __init__(self, question, parent=None):
super(Question, self).__init__(parent)
self.question = QtGui.QLabel(question, self)
self.answer = QtGui.QLineEdit(self)
self.submit = QtGui.QPushButton('Submit', self)
form = QtGui.QFormLayout(self)
form.addRow(self.question, self.answer)
form.addRow(self.submit)

if __name__ == '__main__':
User = ''
app = QtGui.QApplication([])
questions = [
'What is 5+5?',
'What is 45+10?',
'What is 28+47?',
'What is 22+13?',
]
window = StartTest(questions)
window.show()
# window.showFullScreen()
app.exec_()

关于python - 是否可以将 QTableWidget 水平添加到布局中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23407727/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com