我将工具栏添加到小部件中,并动态隐藏操作(它们也用于上下文菜单)。我在对齐/尺寸方面遇到了一些问题。在下面的图片中,测试1是“正确的”,我希望其他两个只有“C”按钮,右对齐(如测试3,但没有多余的左空格)。你知道吗
代码显示了我的尝试。测试2只是在动作A和B上使用.setVisible(False)
,而测试3则使用相同的方法,在左侧添加两个空的QLabel
(如果我只添加一个),C不会右对齐。看起来QToolBar
至少需要3个按钮之类的。你知道吗
你知道怎么解决吗?你知道吗
#!/usr/bin/env python
from PyQt4.QtGui import *
import sys
class MainWindow(QMainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
stylesheet = 'QToolButton{padding: 0; margin: 0} QToolBar{border: 1px solid black}'
layout = QVBoxLayout()
a = QAction('A', self)
b = QAction('B', self)
c = QAction('C', self)
toolbar = QToolBar()
toolbar.addAction(a)
toolbar.addAction(b)
toolbar.addAction(c)
toolbar.setStyleSheet(stylesheet)
hbox = QHBoxLayout()
hbox.addWidget(QLabel('Test 1'))
hbox.addStretch(1)
hbox.addWidget(toolbar)
group = QGroupBox()
group.setLayout(hbox)
layout.addWidget(group)
a = QAction('A', self)
b = QAction('B', self)
c = QAction('C', self)
toolbar = QToolBar()
toolbar.addAction(a)
toolbar.addAction(b)
toolbar.addAction(c)
a.setVisible(False)
b.setVisible(False)
toolbar.setStyleSheet(stylesheet)
hbox = QHBoxLayout()
hbox.addWidget(QLabel('Test 2'))
hbox.addStretch(1)
hbox.addWidget(toolbar)
group = QGroupBox()
group.setLayout(hbox)
layout.addWidget(group)
a = QAction('A', self)
b = QAction('B', self)
c = QAction('C', self)
toolbar = QToolBar()
toolbar.addWidget(QLabel(''))
toolbar.addWidget(QLabel(''))
toolbar.addAction(a)
toolbar.addAction(b)
toolbar.addAction(c)
a.setVisible(False)
b.setVisible(False)
toolbar.setStyleSheet(stylesheet)
hbox = QHBoxLayout()
hbox.addWidget(QLabel('Test 3'))
hbox.addStretch(1)
hbox.addWidget(toolbar)
group = QGroupBox()
group.setLayout(hbox)
layout.addWidget(group)
layout.addStretch(1)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.show()
app = QApplication(sys.argv)
win = MainWindow()
sys.exit(app.exec_())
要在QToolbar中动态隐藏动作,不能对动作使用
setVisible(False)
,因为它只会从视图中“隐藏”动作,但按钮本身仍然存在,这就是为什么会有额外的空白。即使动作是隐藏的,隐藏对象中仍然存在填充,这会给您不需要的空白空间。类似地,当您添加空的QLabels
时,这个“隐藏”小部件也会留下空白,因为小部件的物理区域仍然存在。你知道吗考虑到这一点,解决方案是使用
removeAction()
从QToolbar
中删除操作。这样,实际对象将从布局中删除,因此没有空白。下面的示例演示了如何使用处理程序在QToolbar
中添加和删除操作。您可以使用.actions()
检查Qtoolbar
中有哪些对象,并且根据要删除的操作,您只需将其传递给removeAction()
。当没有更多的操作要添加或删除时,我将由您来实现错误处理。你知道吗相关问题 更多 >
编程相关推荐