gpt4 book ai didi

python - QToolBar 的大小和与隐藏操作的对齐

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:21 26 4
gpt4 key购买 nike

我正在向小部件添加工具栏,并动态隐藏操作(它们也用于上下文菜单)。我遇到一些对齐/大小问题。在下图中,测试 1 是“正确的”,我希望其他两个只有“C”按钮,右对齐(与测试 3 一样,但没有额外的左侧空间)。

enter image description here

代码显示了我的尝试。测试 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)在操作上,因为它只会从 View 中“隐藏”操作,但按钮本质上仍然存在,这就是为什么您有额外的空白区域。即使操作是隐藏的,隐藏对象中仍然存在填充,这会给您带来不需要的空白空间。同样,当您添加空QLabels时,这个“隐藏”小部件也会留下空白,因为小部件的物理区域仍然存在。

考虑到这一点,解决方案是从 QToolbar 中删除该操作使用removeAction() 。这样,实际对象将从布局中删除,这样就不会有空白。以下示例展示了如何在 QToolbar 中添加和删除操作使用处理程序。您可以检查Qtoolbar中有哪些对象。与 .actions()根据您想要删除的操作,您可以简单地将其传递给 removeAction() 。当没有更多操作要添加或没有更多操作要删除时,我将让您自行实现错误处理。

enter image description here

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys

class MainWindow(QMainWindow):
def __init__(self):
super(QMainWindow, self).__init__()

self.stylesheet = 'QToolButton{padding: 0; margin: 0} QToolBar{border: 1px solid black}'

self.main_layout = QGridLayout()
self.layout = QVBoxLayout()

self.a = QAction('A', self)
self.b = QAction('B', self)
self.c = QAction('C', self)

self.action_table = {1: self.a,
2: self.b,
3: self.c
}

self.test1_toolbar = QToolBar()
self.test1_toolbar.addAction(self.a)
self.test1_toolbar.addAction(self.b)
self.test1_toolbar.addAction(self.c)
self.test1_toolbar.setStyleSheet(self.stylesheet)
self.test1_hbox = QHBoxLayout()
self.test1_hbox.addWidget(QLabel('Test 1'))
self.test1_hbox.addStretch(1)
self.test1_hbox.addWidget(self.test1_toolbar)
self.test1_group = QGroupBox()
self.test1_group.setLayout(self.test1_hbox)
self.layout.addWidget(self.test1_group)

self.test2_toolbar = QToolBar()
self.test2_toolbar.addAction(self.a)
self.test2_toolbar.addAction(self.b)
self.test2_toolbar.addAction(self.c)
self.test2_toolbar.setStyleSheet(self.stylesheet)
self.test2_add_button = QPushButton('Add')
self.test2_add_button.clicked.connect(self.test2_add_action)
self.test2_remove_button = QPushButton('Remove')
self.test2_remove_button.clicked.connect(self.test2_remove_action)
self.test2_hbox = QHBoxLayout()
self.test2_hbox.addWidget(QLabel('Test 2'))
self.test2_hbox.addStretch(1)
self.test2_hbox.addWidget(self.test2_toolbar)
self.test2_group = QGroupBox()
self.test2_group.setLayout(self.test2_hbox)

self.layout.addWidget(self.test2_group)

self.test3_toolbar = QToolBar()
self.test3_toolbar.addAction(self.a)
self.test3_toolbar.addAction(self.b)
self.test3_toolbar.addAction(self.c)
self.test3_toolbar.setStyleSheet(self.stylesheet)
self.test3_hbox = QHBoxLayout()
self.test3_hbox.addWidget(QLabel('Test 3'))
self.test3_hbox.addStretch(1)
self.test3_hbox.addWidget(self.test3_toolbar)
self.test3_group = QGroupBox()
self.test3_group.setLayout(self.test3_hbox)
self.layout.addWidget(self.test3_group)

self.layout.addStretch(1)

self.widget = QWidget()

self.main_layout.addLayout(self.layout,0,0,1,1)
self.main_layout.addWidget(self.test2_add_button,0,1,1,1)
self.main_layout.addWidget(self.test2_remove_button,0,2,1,1)
self.widget.setLayout(self.main_layout)
self.setCentralWidget(self.widget)
self.show()

def test2_add_action(self):
objects = len(self.test2_toolbar.actions())
self.test2_toolbar.addAction(self.action_table[objects + 1])

def test2_remove_action(self):
objects = len(self.test2_toolbar.actions())
self.test2_toolbar.removeAction(self.action_table[objects])

app = QApplication(sys.argv)
win = MainWindow()
sys.exit(app.exec_())

关于python - QToolBar 的大小和与隐藏操作的对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com