我正在尝试为自己构建一个简单的图形计算器,作为自学 PyQt 的一种方式。我希望计算器有一个 Pane ,其中列出所有绘制的方程式并显示使用的线条样式。
我从 QListWidget 开始实现这些目的, Pane 包含一个可滚动的方程式列表,但不显示线条样式,因为 QListWidget 只允许字符串或图标。
所以我尝试改用 QAbstractScrollArea 小部件。对于每个等式,我使用 QHBoxLayout 生成两个小部件,一个包含等式字符串的标签,以及一个我在其中绘制线条样式的 QWidget。然后,我使用 QVBoxLayout 将所有方程式 QHBoxLayouts 堆叠在 ScrollArea 中。
问题是 QVBoxLayout 使用了所有可用空间。因此,如果我只有三个方程式,它们会散布在整个 Pane 中,而不是像我希望的那样列在顶部,而如果我有太多方程式无法放在 Pane 中,它们就会一个一个地堆叠起来,而不是而不是使该区域可滚动。
这就是计算器出现太多方程式的样子......
这就是它看起来太少...
有没有人对解决这些问题的更好方法有任何建议?一种想法是以编程方式生成图标以具有线条的属性并在 listwidget 中使用这些,这可能吗?
最佳答案
听起来您想要的是具有多列的 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_())
关于python - 生成 PyQt 图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19811220/