2014-01-27 31 views
2

我无法弄清楚如何创建带有两行小工具的工具栏。我正在开发一个Python3/Qt4项目。(Qt)工具栏中的两行小工具

我的猜测:

  • 一个小工具添加到工具栏插件

  • 添加垂直布局(或QGridLayout,没关系)以增加部件

  • 加工具栏按钮的布局

但是我得到我是一个小而空的工具栏:我需要以某种方式“拉伸”小部件吗?

我Python3代码,试图插入工具栏中的上下两个按钮:

self.main_toolbar = self.addToolBar('MyToolBar') 

    self.toolbar_widget = QtGui.QWidget(self.main_toolbar) 
    self.toolbar_layout = QtGui.QVBoxLayout() 
    self.toolbar_widget.setLayout(self.toolbar_layout) 

    button1 = QtGui.QPushButton(self) 
    button1.setText("button1") 
    self.toolbar_layout.addWidget(button1) 

    button2 = QtGui.QPushButton(self) 
    button2.setText("button2") 
    self.toolbar_layout.addWidget(button2) 
+0

你为什么要添加的按钮布局,而不是工具栏小工具尝试添加该按钮将toolbar_widget.addWidget(按钮1) – Metoo

+0

您不能添加?窗口小部件:属性错误:'QWidget'对象没有属性'addWidget'。 – suizokukan

+0

QToolbar有一个方法QAction * QToolBar :: addWidget(QWidget * widget) – Metoo

回答

1

很简单:你真的需要两个工具栏,一个在另一个。

您不能仅将子窗口小部件添加到工具栏。你的main_toolbar大概是QToolBar类。你不能简单地添加一个toolbar_widget它!

您都不能更改QToolBar的布局。工具栏管理自己的孩子的布局,你不应该混淆它 - 它不是这样设计的。

将小工具添加到工具栏上的唯一方法是通过addWidget法工具栏的的不是布局!

您的代码是错误的。你能做什么,以及所有可以用工具栏做的是:

self.main_toolbar = self.addToolBar('MyToolBar') 

button1 = QtGui.QPushButton(self) 
button1.setText("button1") 
self.main_toolbar.addWidget(button1) 

button2 = QtGui.QPushButton(self) 
button2.setText("button2") 
self.main_toolbar.addWidget(button2) 

你想要做的根本就不是由工具栏支持。如果他们不合适,工具栏也许可以将其项目排列在多行中。这可能取决于风格。您可以自由插入内部布局和两个子按钮的“高”工具栏小部件,但它看起来非常难看。

+0

这完全错了:)你可以像任何其他容器部件一样将任何你喜欢的部件添加到工具栏中。 – ekhumoro

+0

@ekhumoro我没有说你不能添加你喜欢的小部件,只是你不能改变工具栏上的布局。工具栏管理自己的布局,所以'self.toolbar_widget.setLayout(self.toolbar_layout)'是错误的。 –

+0

这完全没有错!问题中的代码工作得很好(如果你不相信我会很容易测试自己)。缺少的唯一东西是显式地将小部件添加到工具栏。 – ekhumoro

1

您发布的代码很好,只是您忘记将小工具添加到工具栏。

可以使用QToolBar.addWidget做到这一点:

self.main_toolbar.addWidget(self.toolbar_widget) 
+0

当然,它看起来像垃圾,而不是你应该如何使用工具栏。 –

+0

@KubaOber。对我来说似乎没问题,特别是如果布局边距被移除并且间距被调整。基本上,它看起来像两个窄的按钮,一个在另一个之上 - 我想这是OP之后的东西。 – ekhumoro