python - 生成 PyQt 图例

标签 python pyqt qlistwidget qscrollarea qicon

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

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

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

问题是 QVBoxLayout 使用了所有可用空间。因此,如果我只有三个方程式,它们会散布在整个 Pane 中,而不是像我希望的那样列在顶部,而如果我有太多方程式无法放在 Pane 中,它们就会一个一个地堆叠起来,而不是而不是使该区域可滚动。

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

My Graphics Calculator with too many equations.

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

My Graphics Calculator with too few equations.

有没有人对解决这些问题的更好方法有任何建议?一种想法是以编程方式生成图标以具有线条的属性并在 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/

相关文章:

qt - 如何设置 QListWidgetItem 的最小高度?

c++ - 如何检查 QListWidget 中的所有项目?

python - 当用户与列表交互时,如何获取 QListWidget 的所有选定项目?

python - python 的任何内置模块都使用线程吗?

python - 您如何查看 mechanize 使用的请求 header ?

python - numpy 将 RGB 图像转换为 YIQ 颜色空间

python - 在树莓派上记录 python 错误

python - 检查列表与列表理解重叠

python - 一般来说,(Python)项目是如何构建的?

python - PySide 中出现 "QTimeLine already running"消息的原因是什么?