Python 如何将QTreeWidget的子项设置为在单击其父项时自动选择并高亮显示
这是我的代码,它会工作一段时间,但大多数时候不会。我一直在寻找这个问题,但解决方案就是不起作用 (我使用的是pyside2,而不是pyqt5) 单击父项 自动选择子对象Python 如何将QTreeWidget的子项设置为在单击其父项时自动选择并高亮显示,python,pyside2,Python,Pyside2,这是我的代码,它会工作一段时间,但大多数时候不会。我一直在寻找这个问题,但解决方案就是不起作用 (我使用的是pyside2,而不是pyqt5) 单击父项 自动选择子对象 import sys import time from PySide2.QtWidgets import QWidget,QPushButton,QApplication,QListWidget,QGridLayout,\ QLabel,QMainWindow,QLineEdit,QScrollArea,QVBoxLayou
import sys
import time
from PySide2.QtWidgets import QWidget,QPushButton,QApplication,QListWidget,QGridLayout,\
QLabel,QMainWindow,QLineEdit,QScrollArea,QVBoxLayout,QMessageBox,QComboBox,QMenu,QAction,\
QDialog,QTreeWidget,QTreeWidgetItem,QSlider,QAbstractItemView,QHBoxLayout
from PySide2.QtCore import QTimer,QDateTime,QSize,Qt,Signal,Slot,QThread,QMutex,QMutexLocker,QItemSelectionModel
from PySide2.QtGui import *
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.resize(320, 300)
self.setWindowTitle("--")
self.setStyleSheet(
"""
QMainWindow
{
background-color:white;
color:white;
margin:0px
}
"""
)
self.InitializeWindow()
def InitializeWindow(self):
self.center = QWidget(self)
self.center.setGeometry(0, 0, 320, 300);
layout=QHBoxLayout()
self.tree=QTreeWidget()
self.tree.setColumnCount(1)
self.tree.setHeaderLabels(['func'])
root1=QTreeWidgetItem(self.tree)
root1.setText(0,'-A')
self.tree.setColumnWidth(0,100)
self.child1_1=QTreeWidgetItem(root1)
self.child1_1.setText(0,'--aa')
self.child1_2=QTreeWidgetItem(root1)
self.child1_2.setText(0,'--bb')
root2=QTreeWidgetItem(self.tree)
root2.setText(0,'-B')
self.child2_1=QTreeWidgetItem(root2)
self.child2_1.setText(0,'--cc')
self.child2_2=QTreeWidgetItem(root2)
self.child2_2.setText(0,'--dd')
self.child2_3=QTreeWidgetItem(root2)
self.child2_3.setText(0,'--ee')
self.tree.addTopLevelItem(root1)
self.tree.addTopLevelItem(root2)
self.area_op=QWidget()
self.area_op.setMinimumWidth(100)
self.area_op.setStyleSheet(
'''QWidget
{
background-color:white;
color:white;
font-size:15px;
border:0px solid #708090;
margin:0px
}'''
)
self.tree.currentItemChanged.connect(self.tree_onClick)
layout.addWidget(self.tree)
layout.addWidget(self.area_op)
self.center.setLayout(layout)
self.show()
def tree_onClick(self):
getSelected = self.tree.currentItem()
#print(str(sys._getframe().f_lineno),getSelected)
if getSelected:
if(getSelected.text(0)=='--cc'):
pass
elif(getSelected.text(0)=="-A"):
getSelected.setExpanded(True)
self.tree.setCurrentItem(self.child1_1)
elif(getSelected.text(0)=="-B"):
getSelected.setExpanded(True)
self.tree.setCurrentItem(self.child2_1,0,QItemSelectionModel.Select)
if self.child2_1.isSelected()==False:
self.child2_1.setSelected(True)
else:
pass
else:
print(str(sys._getframe().f_lineno),"tree error ",getSelected)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
如果要自动选择第一个子项,则不应检查项目文本,而应检查它是否确实包含子项 此外,使用
currentItemChanged
可能不是一个好主意,因为如果您试图更改当前项作为其结果,该信号可能会产生一些不连续性(这可能是您的问题的根源,即使我无法重现它)
解决方案是使用信号,并利用其第一个参数(单击的项)
如果系统告诉你,你的文章大部分是代码,并要求你添加更多的上下文,不要只是在其中加入随机噪音。相反,澄清你的问题并添加上下文。请解释一下你所说的“有时工作”是什么意思。在什么条件下?“不起作用”是什么意思?有错误吗?再见,非常感谢!我接错信号是为了我的目的,我的工作!
# ...
self.tree.itemClicked.connect(self.tree_onClick)
# ...
def tree_onClick(self, item, column):
if item.childCount():
self.tree.setCurrentItem(item.child(0))