此代码创建QTreeWidget
QComboBox
,QLineEdit
设置为item widgets
(使用setItemWidget()
方法)。
单击项目的名称(“Item_1”,“Item_2”等)会使项目“已选中”,但其项目小部件将保持取消选中状态。是否有任何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_())
答案 0 :(得分:1)
单击项目时,您可以实施SIGNAL void itemClicked (QTreeWidgetItem*,int)
1自动选择项目窗口小部件。在这种情况下,我会自动选择QLineEdit
。
首先,连接void itemClicked (QTreeWidgetItem*,int)
的SIGNAL QTreeWidget
。
最后,获取当前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
此致