我遇到了这个问题,并且作为Qt noob我无法修复它。
基本上,我实例化了QToolButton
并将其作为QTreeWidget
的父级。 QTreeWidget
位于垂直布局中,当我尝试使用QTreeWidget
更改QTreeWidget.size()
内部工具按钮的位置时,会给出非常意外和错误的结果。
任何人都可以帮我吗?将深深体会到帮助。谢谢!
答案 0 :(得分:3)
您尚未发布任何实际操作的示例,但以下是如何将按钮附加到树窗口小部件的右下角:
编辑:我看到你想要在树上合成小部件
后,我已经替换了我的答案from PyQt4 import QtCore, QtGui
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.resize(640,480)
self.layout = QtGui.QVBoxLayout(self)
self.layout.setSpacing(0)
self.tree = QtGui.QTreeWidget(self)
self.tree.installEventFilter(self)
self.layout.addWidget(self.tree)
self.button = QtGui.QToolButton(self.tree)
self.button.setText("FOO")
self.button.setMinimumSize(100, 30)
def eventFilter(self, obj, event):
if obj is self.tree and event.type() == event.Resize:
self.alignTreeButton()
return False
def alignTreeButton(self):
padding = QtCore.QSize(5,5) # optional
newSize = self.tree.size() - self.button.size() - padding
self.button.move(newSize.width(), newSize.height())
if __name__ == "__main__":
app = QtGui.QApplication([])
w = Widget()
w.show()
w.raise_()
app.exec_()
该按钮只是树的父级,我们在树上安装事件过滤器以捕获调整大小事件。调整树的大小后,我们取其大小,减去按钮的大小,然后移动按钮。
我认为实际上对QTreeWidget进行子类化更有效,将QToolButton作为成员组合,然后在本地重载resizeEvent()
以处理调整大小。首先,这使得TreeWidget的行为处理变得更加清晰。此外,我相信它可以减少EventFilter添加到主窗口的开销。 eventFiler将是一个python可调用的,由于它处理对象的每个事件,因此被调用了很多次。而TreeWidget的本地resizeEvent()仅在调整大小期间调用。
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.resize(640,480)
self.layout = QtGui.QVBoxLayout(self)
self.layout.setSpacing(0)
self.tree = TreeWidget(self)
self.layout.addWidget(self.tree)
class TreeWidget(QtGui.QTreeWidget):
def __init__(self, *args, **kwargs):
super(TreeWidget, self).__init__(*args, **kwargs)
self.button = QtGui.QToolButton(self)
self.button.setText("FOO")
self.button.setMinimumSize(100, 30)
def resizeEvent(self, event):
super(TreeWidget, self).resizeEvent(event)
self.alignTreeButton()
def alignTreeButton(self):
padding = QtCore.QSize(5,5) # optional
newSize = self.size() - self.button.size() - padding
self.button.move(newSize.width(), newSize.height())