如何自动选择所有QTreeWidgetItem小部件
这段代码创建了一个 QTreeWidget
,里面有 QComboBox
和 QLineEdit
作为 item widgets
(使用 setItemWidget()
方法来设置)。当你点击某个项目的名字(比如 'Item_1'、'Item_2' 等等)时,这个项目会被“选中”,但是它里面的那些小部件(item widgets)却不会被选中。有没有什么 QTreeWidgetItem
的标志或者属性可以设置,让点击项目时它里面的所有小部件都自动选中呢?
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
class Tree(QtGui.QTreeWidget):
def __init__(self, *args, **kwargs):
super(Tree, self).__init__()
for each in ['Item_1','Item_2','Item_3','Item_4','Item_5']:
item=QtGui.QTreeWidgetItem([each])
self.addTopLevelItem(item)
self.setItemWidget(item, 1, QtGui.QComboBox())
self.setItemWidget(item, 2, QtGui.QLineEdit())
self.setColumnCount(5)
self.resize(360,240)
self.show()
tree=Tree()
sys.exit(app.exec_())
1 个回答
1
当你点击某个项目时,可以使用信号 void itemClicked (QTreeWidgetItem*,int)
,这样它的子项目会自动被选中。在这个例子中,我会自动选择 QLineEdit
。
首先,要连接 QTreeWidget
的信号 void itemClicked (QTreeWidgetItem*,int)
。
最后,从当前的 QTreeWidgetItem
获取当前项目的小部件,并将其设置为焦点。
import sys
from PyQt4 import QtCore, QtGui
class Tree(QtGui.QTreeWidget):
ENUM_COMBOBOX = 1
ENUM_LINEEDIT = 2
def __init__(self, *args, **kwargs):
super(Tree, self).__init__()
for each in ['Item_1','Item_2','Item_3','Item_4','Item_5']:
item=QtGui.QTreeWidgetItem([each])
self.addTopLevelItem(item)
self.setItemWidget(item, self.ENUM_COMBOBOX, QtGui.QComboBox())
self.setItemWidget(item, self.ENUM_LINEEDIT, QtGui.QLineEdit())
self.setColumnCount(5)
self.resize(360,240)
self.show()
self.connect(self, QtCore.SIGNAL('itemClicked (QTreeWidgetItem *, int)'), self.itemClickedEvent)
def itemClickedEvent (self, currentQTreeWidgetItem, column):
currentQWidget = self.itemWidget(currentQTreeWidgetItem, self.ENUM_LINEEDIT)
currentQWidget.setFocus()
app = QtGui.QApplication([])
tree=Tree()
sys.exit(app.exec_())
itemClicked 方法参考 : http://pyqt.sourceforge.net/Docs/PyQt4/qtreewidget.html#itemClicked
祝好,