我正在尝试为自己构建一个简单的图形计算器,作为自学PyQt的一种方式。我希望计算器有一个窗格,列出所有绘制的方程式,并显示使用的线条样式。
我从一个QListWidget开始实现这些目的,窗格包含一个可滚动的方程列表,但不显示线条样式,因为QListWidget只允许字符串或图标。
所以我尝试使用QAbstractScrollArea小部件。对于每个等式,我使用QHBoxLayout生成两个小部件,一个包含方程字符串的标签,以及一个QWidget,我在其中绘制线条样式。然后我使用QVBoxLayout在ScrollArea中堆叠所有等式QHBoxLayouts。
问题是QVBoxLayout使用了它可用的所有空间。因此,如果我只有三个方程式,它们会遍布整个窗格,而不是像我希望的那样列在顶部,而如果我有太多的方程式可以放在窗格中,它们会叠加在另一个上面而不是而不是使该区域可滚动。
这就是计算器出现的方程式太多......
这就是它看起来太少......
有没有人有更好的方法来解决这些问题?一个想法是以编程方式生成图标以获得行的属性并在listwidget中使用它们,这可能吗?
答案 0 :(得分:2)
听起来你想要的是一个包含多列的QListWidget - 而QTreeWidget可以完全适应。
这是一个简单的演示:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.list = QtGui.QTreeWidget(self)
self.list.setRootIsDecorated(False)
self.list.setUniformRowHeights(True)
self.list.setAllColumnsShowFocus(True)
self.list.setItemsExpandable(False)
self.list.header().hide()
self.list.setColumnCount(2)
for label, color in (
('v=x**2', 'red'),
('v=x/2', 'blue'),
('v=2*x', 'green'),
('v=3*2', 'orange'),
('v=5-x', 'purple'),
):
item = QtGui.QTreeWidgetItem([label, '------------'])
item.setForeground(1, QtGui.QColor(color))
self.list.addTopLevelItem(item)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.list)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 300, 200)
window.show()
sys.exit(app.exec_())