为了账号安全,请及时绑定邮箱和手机立即绑定

增加 qtreewidget 的大小

增加 qtreewidget 的大小

大话西游666 2023-09-26 14:06:55
事实证明,我在 PyQT5 中为 Qtreewidget 发出信号是一个问题。当您单击“增加”时,您需要增加 QTreeWidget 的大小,并在再次单击时减少 QTreeWidget 的大小(就像 Excel 中的过滤器),如下所示代码: self.tree_countries.setGeometry(QRect(1050, 100, 200, 250)) self.tree_countries.setHeaderHidden(True) self.tree_countries.setStyleSheet("QTreeWidget {\n"                                   "border: 1px solid #3b3838;\n"                                   "font: 57 12pt \"Google Sans Medium\";\n"                                   "color: white;\n"                                   "background-color: #3b3838\n"                                   "}\n") sql = filter_sql() parent = QTreeWidgetItem(self.tree_countries) parent.setText(0, "Страна") parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) for country in sql.all_countries():     country = str(country)     child = QTreeWidgetItem(parent)     child.setFlags(child.flags() | Qt.ItemIsUserCheckable)     child.setText(0, country[2:-3])     child.setCheckState(0, Qt.Unchecked) self.tree_countries.show()
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

如果您想根据子项是展开还是折叠来更改 QTreeWidget 的高度,则必须使用展开和折叠信号。您还必须计算所需的高度。


from PyQt5 import QtCore, QtWidgets



class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, parent=None):

        super().__init__(parent)


        self.tree = QtWidgets.QTreeWidget()

        self.tree.header().hide()


        root_item = QtWidgets.QTreeWidgetItem(self.tree)

        root_item.setText(0, "root")

        root_item.setFlags(

            root_item.flags() | QtCore.Qt.ItemIsTristate | QtCore.Qt.ItemIsUserCheckable

        )


        for i in range(10):

            child = QtWidgets.QTreeWidgetItem(root_item)

            child.setFlags(child.flags() | QtCore.Qt.ItemIsUserCheckable)

            child.setText(0, "Child-{}".format(i))

            child.setCheckState(0, QtCore.Qt.Unchecked)


        central_widget = QtWidgets.QWidget()

        self.setCentralWidget(central_widget)

        lay = QtWidgets.QVBoxLayout(central_widget)

        lay.addWidget(self.tree)

        lay.addStretch(1)


        self.tree.collapsed.connect(self.handle_collapsed)

        self.tree.expanded.connect(self.handle_expanded)


    def handle_collapsed(self, index):

        h = self.tree.rowHeight(index) + self.tree.header().height() + 1

        self.adjust_height(h)


    def handle_expanded(self):

        h = self.tree.sizeHint().height()

        self.adjust_height(h)


    def adjust_height(self, height):

        self.tree.setFixedHeight(height)


    def showEvent(self, event):

        index = self.tree.indexFromItem(self.tree.topLevelItem(0))

        if self.tree.isExpanded(index):

            QtCore.QTimer.singleShot(0, self.handle_expanded)

        else:

            QtCore.QTimer.singleShot(

                0, lambda index=index: self.handle_collapsed(index)

            )

        super().showEvent(event)



app = QtWidgets.QApplication([])


w = MainWindow()

w.show()


app.exec_()


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信