PyQt5 QTreeWidget 在布局中显示小部件外的额外列
PyQt5 QTreeWidget in layout showing an extra column outside the widget
我正在尝试编写一个 PyQt5 小部件,它将成为应用程序中的基本预设管理器。我正在尝试使用 QTreeWidget 来显示每种类型的结构。我有一个奇怪的问题,我看到一个额外的 QTreeWidget,在我的 QTreeWidget 之外有一个名为“1”的列。我附上了图片(抱歉,我无法截屏)和代码。我还注意到如果我不使用 classes.
就不会发生这种情况
这是显示问题的测试代码:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTree(QtWidgets.QTreeWidget):
def __init__(self, parent = None):
super(self.__class__, self).__init__(parent)
boxLayout = QtWidgets.QVBoxLayout()
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(['Preset Name'])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
boxLayout.addWidget(treeWidget)
self.setLayout(boxLayout)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MyTree()
w.show()
sys.exit(app.exec_())
这是我看到的:
我最好的猜测是布局导致了它,因为如果我像这样创建 QTreeWidget:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
app = QtWidgets.QApplication(sys.argv)
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(['Preset Name'])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
treeWidget.show()
sys.exit(app.exec_())
这是我看到的:
任何想法如何让它像第二张图片一样显示,来自 class?
非常感谢任何帮助
错误很简单:你的window(MyTree)是一个空的QTreeWidget,里面有另一个QTreeWidget,所以“1”属于空的QTreeWidget。
有 2 种可能的解决方案:
没有用户作为 QTreeWidget 的基础class
class MyTree(QtWidgets.QWidget):
def __init__(self, parent=None):
super(self.__class__, self).__init__(parent)
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(["Preset Name"])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
boxLayout = QtWidgets.QVBoxLayout(self)
boxLayout.addWidget(treeWidget)
不要嵌套新的 QTreeWidget
class MyTree(QtWidgets.QTreeWidget):
def __init__(self, parent=None):
super(self.__class__, self).__init__(parent)
self.setHeaderLabels(["Preset Name"])
self.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
self.insertTopLevelItems(0, items)
我正在尝试编写一个 PyQt5 小部件,它将成为应用程序中的基本预设管理器。我正在尝试使用 QTreeWidget 来显示每种类型的结构。我有一个奇怪的问题,我看到一个额外的 QTreeWidget,在我的 QTreeWidget 之外有一个名为“1”的列。我附上了图片(抱歉,我无法截屏)和代码。我还注意到如果我不使用 classes.
就不会发生这种情况这是显示问题的测试代码:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTree(QtWidgets.QTreeWidget):
def __init__(self, parent = None):
super(self.__class__, self).__init__(parent)
boxLayout = QtWidgets.QVBoxLayout()
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(['Preset Name'])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
boxLayout.addWidget(treeWidget)
self.setLayout(boxLayout)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MyTree()
w.show()
sys.exit(app.exec_())
这是我看到的:
我最好的猜测是布局导致了它,因为如果我像这样创建 QTreeWidget:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
app = QtWidgets.QApplication(sys.argv)
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(['Preset Name'])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
treeWidget.show()
sys.exit(app.exec_())
这是我看到的:
任何想法如何让它像第二张图片一样显示,来自 class?
非常感谢任何帮助
错误很简单:你的window(MyTree)是一个空的QTreeWidget,里面有另一个QTreeWidget,所以“1”属于空的QTreeWidget。
有 2 种可能的解决方案:
没有用户作为 QTreeWidget 的基础class
class MyTree(QtWidgets.QWidget): def __init__(self, parent=None): super(self.__class__, self).__init__(parent) treeWidget = QtWidgets.QTreeWidget() treeWidget.setHeaderLabels(["Preset Name"]) treeWidget.setColumnCount(1) items = [] for i in range(10): items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)])) treeWidget.insertTopLevelItems(0, items) boxLayout = QtWidgets.QVBoxLayout(self) boxLayout.addWidget(treeWidget)
不要嵌套新的 QTreeWidget
class MyTree(QtWidgets.QTreeWidget): def __init__(self, parent=None): super(self.__class__, self).__init__(parent) self.setHeaderLabels(["Preset Name"]) self.setColumnCount(1) items = [] for i in range(10): items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)])) self.insertTopLevelItems(0, items)