生成PyQt图例

时间:2013-11-06 11:43:14

标签: python pyqt qlistwidget qscrollarea qicon

我正在尝试为自己构建一个简单的图形计算器,作为自学PyQt的一种方式。我希望计算器有一个窗格,列出所有绘制的方程式,并显示使用的线条样式。

我从一个QListWidget开始实现这些目的,窗格包含一个可滚动的方程列表,但不显示线条样式,因为QListWidget只允许字符串或图标。

所以我尝试使用QAbstractScrollArea小部件。对于每个等式,我使用QHBoxLayout生成两个小部件,一个包含方程字符串的标签,以及一个QWidget,我在其中绘制线条样式。然后我使用QVBoxLayout在ScrollArea中堆叠所有等式QHBoxLayouts。

问题是QVBoxLayout使用了它可用的所有空间。因此,如果我只有三个方程式,它们会遍布整个窗格,而不是像我希望的那样列在顶部,而如果我有太多的方程式可以放在窗格中,它们会叠加在另一个上面而不是而不是使该区域可滚动。

这就是计算器出现的方程式太多......

My Graphics Calculator with too many equations.

这就是它看起来太少......

My Graphics Calculator with too few equations.

有没有人有更好的方法来解决这些问题?一个想法是以编程方式生成图标以获得行的属性并在listwidget中使用它们,这可能吗?

1 个答案:

答案 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_())