【问题标题】:Generate PyQt Legend生成 PyQt 图例
【发布时间】:2013-11-17 15:20:30
【问题描述】:

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

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

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

问题在于 QVBoxLayout 使用了所有可用的空间。因此,如果我只有三个方程,它们会散布在整个窗格中,并且不会像我希望的那样列在顶部,而如果我有太多方程无法放入窗格中,它们会相互堆叠,而不是而不是使该区域可滚动。

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

这就是它看起来太少的样子......

有人对解决这些问题的更好方法有什么建议吗?一种想法是以编程方式生成图标以具有线条的属性并在列表小部件中使用这些图标,这可能吗?

【问题讨论】:

    标签: python pyqt qlistwidget qscrollarea qicon


    【解决方案1】:

    听起来你想要的是一个具有多列的 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_())
    

    【讨论】:

    • 太棒了,非常感谢。我所做的一项编辑是使用 u'\u2015\u2015...' 而不是 '----...',它提供了更好的符号。
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多