1

我正在将 QToolButtons 动态添加到从 QToolBar 继承的工具栏中。我有一个元组列表(小部件,回调),其中包含应添加到工具栏的内容。理论上,我想按请求对象对它们进行分组,并用 addSeparator() 分隔组。

我的小部件字典由三个小部件元组组成,两个由同一个键拥有。目前,我所有的小部件都是 QToolButtons。

我尝试了以下两个“添加”功能,并附有结果描述:

# self.registered_widgets is an OrderedDict:
#    key: requesting object string, value: ((widget, callback), ...)

def add_registered_widgets_to_toolbar(self):
    print "add_registered_widgets_to_toolbar"

    #import pdb;pdb.set_trace()

    #self.reg... is an OrderedDict
    for key in self.registered_widgets.keys():
        widgetList = self.registered_widgets[key]
        print key
        for widgetTuple in widgetList:
            print widgetTuple[0]
            print widgetTuple[0].parent()


            self.addWidget(widgetTuple[0])

        self.addSeparator() 

此设置导致第一个小部件永远不会显示。曾经。我已经打印了他们的地址、父母和相关的密钥,以确认他们是我所期望的:

  • 三个独立的小部件
  • 与正确的键相关联
  • 将我的 QToolBar 类对象作为父小部件
  • 并且都按照我期望的顺序进行处理

所有这些条件都是真实的,没有效果。

第二次尝试:

def add_registered_widgets_to_toolbar(self):
    print "add_registered_widgets_to_toolbar"

    #import pdb;pdb.set_trace()
    l = self.layout()

    for key in self.registered_widgets.keys():
        widgetList = self.registered_widgets[key]
        print key
        for widgetTuple in widgetList:
            print widgetTuple[0]
            print widgetTuple[0].parent()

            l.addWidget(widgetTuple[0]

        l.addSeperator()        

    self.setLayout(l)

这会导致所有QToolButton 图标重叠,最后一个是模态对话框按钮的全宽。(所有按钮都是使用设置的 QSize (24,24) 创建的。)

此外,与该功能的第一个版本不同,工具栏永远不会正确显示。只是可能(我猜)前四到五个像素显示在我的工具栏上方的小部件和下面的小部件之间。当我将鼠标悬停在它上面时,足以辨认出我三个非常不同的图标的顶部和最后一个的宽度。

我咨询过那些比我自己更了解 Python 的人,没有人有任何想法,即使在程序运行时运行和调试程序之后也是如此。我完全不知所措。

4

0 回答 0