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

Python 是否可以将QTableWidget水平添加到布局中?,python,pyqt,pyqt4,python-3.3,Python,Pyqt,Pyqt4,Python 3.3,我已经编写了一段代码,将问题与分数表并排打印出来。但是,当尝试使用QHBoxLayout(如果运行)呈现表格时,表格不会呈现,但不会显示错误。另一方面,当使用QVBoxLayout时,它会在运行代码时显示。 我是否可以将表格与问答框并排(水平)呈现?拆分器是否可以作为替代方案工作?如果可以,我如何在代码中实现它 我的代码如下: import sys, os, random from PyQt4 import QtCore, QtGui StudentNames = [] StudentScore

我已经编写了一段代码,将问题与分数表并排打印出来。但是,当尝试使用
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_()
导入系统、操作系统、随机
从PyQt4导入QtCore、QtGui
学生姓名=[]
学生成绩=[]
类StartTest(QtGui.QMainWindow):
定义初始化(自我、问题、父项=无):
全球学生姓名
全球学生分数
超级(开始测试,自我)。\uuuuu初始\uuuuuuu(父级)
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))
对于索引,枚举中的问题(问题):
页面=问题(问题,自我)
页面。提交。单击[()]。连接(
lambda index=index:self.handleSubmit(index))
self.stack.addWidget(第页)
self.answers=[]
def handleSubmit(自身,索引):
page=self.stack.widget(索引)
答案=page.answer.text()
#验证提交的答案。。。
self.answers.append(答案)
如果索引
您可以将占位符小部件设置为中心小部件。然后添加一个水平布局,并将小部件添加到该布局中

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中也应如此)

导入系统、操作系统、随机
从PyQt4导入QtCore、QtGui
学生姓名=[]
学生成绩=[]
类StartTest(QtGui.QMainWindow):
定义初始化(自我、问题、父项=无):
全球学生姓名
全球学生分数
超级(开始测试,自我)。\uuuuu初始\uuuuuuu(父级)
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))
对于索引,枚举中的问题(问题):
页面=问题(问题,自我)
页面。提交。单击[()]。连接(
lambda index=index:self.handleSubmit(index))
self.stack.addWidget(第页)
self.answers=[]
centralWidget=QtGui.QWidget(self)
self.setCentralWidget(centralWidget)
mainLayout=QtGui.QHBoxLayout(centralWidget)
self.scoreTable=QtGui.QTableWidget(self)
self.scoredable.setRowCount(len(学生姓名))
self.scoreTable.setColumnCount(1)
self.scoreTable.setVerticalHeaderLabels(学生姓名)
self.scoredable.setHorizontalHeaderLabels(['Scores']))
对于i,枚举中的分数(学生分数):
item=QtGui.QTableWidgetItem(str(分数))
self.scoreTable.setItem(i,0,item)
mainLayout.addWidget(self.stack)
mainLayout.addWidget(self.scoreTable)
def handleSubmit(自身,索引):
page=self.stack.widget(索引)
答案=page.answer.text()
#验证提交的答案。。。
self.answers.append(答案)
如果索引
每次单击提交按钮时,如何编辑此文件以更新QTableWidget?也就是说,每次用户点击提交按钮时,我都希望程序在分数上加1。我知道怎么做,但是QTableWidget不会刷新?我在这里的一个新问题中上传了代码:
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_()