我是一名经验丰富(尽管有些生疏)的Windows程序员。我正在尝试创建一个计算机(Ferranti Argus 400)的部分逻辑模拟,这个计算机是我在1963年设计的(是的,我那么老了!)。然而,我对Python编程还很陌生,使用QTableWidget时遇到了格式问题。
我想在右侧显示它,并显示一组用于输入模拟函数测试数据的控件(并使用QTableWidget来显示模拟运行的步骤),例如逐位显示乘法器的操作过程。
我尝试将QHBoxLayout()作为我的外部容器,其中包含两个嵌入式框。左边的QVBox将包含用于模拟的数据输入,右边的框将包含一个QTablewidget对象,用于滚动显示计算机寄存器的状态(目标机器有32*24位寄存器需要显示,尽管我最初将使用8位进行测试)。
QTableWidget工作正常(下面这个是简化版),直到我在左边添加了一个包含控件的Vbox(此处包含一组)。表格会从其全宽缩小,并定位在剩余空间的右侧。我想把它放在其他控件旁边的左边,并在空间不足时滚动。
我想在右侧显示它,并显示一组用于输入模拟函数测试数据的控件(并使用QTableWidget来显示模拟运行的步骤),例如逐位显示乘法器的操作过程。
我尝试将QHBoxLayout()作为我的外部容器,其中包含两个嵌入式框。左边的QVBox将包含用于模拟的数据输入,右边的框将包含一个QTablewidget对象,用于滚动显示计算机寄存器的状态(目标机器有32*24位寄存器需要显示,尽管我最初将使用8位进行测试)。
QTableWidget工作正常(下面这个是简化版),直到我在左边添加了一个包含控件的Vbox(此处包含一组)。表格会从其全宽缩小,并定位在剩余空间的右侧。我想把它放在其他控件旁边的左边,并在空间不足时滚动。
class App(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'PyQt5 simple window'
self.left = 10
self.top = 50
self.width = 800
self.height = 480
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
# Parent layout
self.central_Widget = QWidget(self)
self.setCentralWidget(self.central_Widget)
self.central_Layout = QHBoxLayout()
# Configure left panel as Vbox
self.leftpanel_Layout = QVBoxLayout()
#
self.leftpanel_Layout.addWidget(DataSelectionGroup("Data entry mode"))
#
# Add stretch to bottom of panel
self.leftpanel_Layout.addStretch(0)
self.rightpanel_Layout = QVBoxLayout()
self.myLogTable = LogTablex()
self.rightpanel_Layout.addWidget(self.myLogTable)
self.setLayout(self.rightpanel_Layout)
# Add left panel layout to central layout
# uncomment these lines to see the unwanted behaviour
#self.central_Layout.addLayout(self.leftpanel_Layout)
#self.central_Layout.addStretch(0)
self.setLayout(self.central_Layout)
self.central_Layout.addLayout(self.rightpanel_Layout)
self.setLayout(self.central_Layout)
self.central_Widget.setLayout(self.central_Layout)
self.setWindowTitle("Demo")
self.show()
class DataSelectionGroup(QGroupBox):
""" Create a group of Radio Buttons to choose type of data entry """
def __init__(self, title):
super().__init__(title)
self.buttonLayout = QVBoxLayout()
# add radio buttons to choose which mode of data entry to use
self.radio1 = QRadioButton("&Binary")
self.buttonLayout.addWidget(self.radio1)
self.radio1.setChecked(True)
self.radio2 = QRadioButton("Decimal &Fraction")
self.buttonLayout.addWidget(self.radio2)
self.radio3 = QRadioButton("Decimal &Integer")
self.buttonLayout.addWidget(self.radio3)
self.setLayout(self.buttonLayout)
class LogTablex(QTableWidget):
def __init__(self, WordLength:int = 24):
super().__init__()
self.WordLength = WordLength
self.initTable(["Note", "X", "Q", "N", "C", "O"])
def initTable(self, headerlist):
font = QFont()
font.setFamily = "Courier New"
font.setPointSize(8)
self.setFont(font)
self.horizontalHeader().setStyleSheet("QHeaderView::section { background-color:lightgrey; }")
self.setColumnCount(len(headerlist))
self.setHorizontalHeaderLabels(headerlist)
self.setRowCount(0)
self.start_newrow()
self.str = '0' * self.WordLength + ' '
self.setCellWidget(0, 0, QLabel("note"))
self.setCellWidget(0, 1, QLabel(self.str))
self.setCellWidget(0, 2, QLabel(self.str))
self.setCellWidget(0, 3, QLabel(self.str))
self.setCellWidget(0, 4, QLabel("1"))
self.setCellWidget(0, 5, QLabel("1"))
self.verticalHeader().setDefaultSectionSize(22)
self.horizontalHeader().setSectionResizeMode(3)
self.resizeColumnsToContents()
def start_newrow(self, note:str = "new note "):
self.insertRow(self.rowCount())
self.setCellWidget(self.rowCount() - 1, 0, QLabel(note))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
这个版本生成了第一张图片。如果您取消注释所示的两行代码,它将生成第二个版本。我已经与此问题斗争了一段时间,但是我无法理解如何使右侧表格正确显示。我希望有人能为我提供帮助。
我正在使用PyQt5和最近1周下载的最新版本Python。我在Windows 10上运行。
这是我的第一篇帖子。我希望格式正确。