![](/img/trans.png)
[英]PyQt5: How to set the hint text/picture to items in QTreeWidget?
[英]PyQt [QTreeWidget]: How to add Radiobutton for items?
對於這個問題,我指的是@Andy PyQt Tree Widget的答案,添加了用於動態刪除的復選框
@Andy那里展示了如何將CheckBox
添加到QTreeWidget
,這很完美。
我想在這里問,如何將RadioButton
添加到QTreeWidget
? ----而且,對我來說更困難的是,盡管它們處於不同的groups
,如何僅使一項可供選擇?
我將代碼從@Andy重寫為PyQt5:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
def main():
app = QApplication (sys.argv)
tree = QTreeWidget ()
headerItem = QTreeWidgetItem()
item = QTreeWidgetItem()
for i in range(3):
parent = QTreeWidgetItem(tree)
parent.setText(0, "Parent {}".format(i))
parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
for x in range(5):
child = QTreeWidgetItem(parent)
child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
child.setText(0, "Child {}".format(x))
child.setCheckState(0, Qt.Unchecked)
tree.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
上面代碼的運行結果:
任何幫助將不勝感激! 謝謝!
如果要建立一個QRadioButton
並在組中排他,則可能的解決方案是實現一個委托,在此委托中,我們將覆蓋paint
方法以繪制QRadioButton
和editorEvent
方法以捕獲click事件並更改狀態其他項目視情況而定。
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class Delegate(QStyledItemDelegate):
def paint(self, painter, option, index):
if not index.parent().isValid():
QStyledItemDelegate.paint(self, painter, option, index)
else:
widget = option.widget
style = widget.style() if widget else QApplication.style()
opt = QStyleOptionButton()
opt.rect = option.rect
opt.text = index.data()
opt.state |= QStyle.State_On if index.data(Qt.CheckStateRole) else QStyle.State_Off
style.drawControl(QStyle.CE_RadioButton, opt, painter, widget)
def editorEvent(self, event, model, option, index):
value = QStyledItemDelegate.editorEvent(self, event, model, option, index)
if value:
if event.type() == QEvent.MouseButtonRelease:
if index.data(Qt.CheckStateRole) == Qt.Checked:
parent = index.parent()
for i in range(model.rowCount(parent)):
if i != index.row():
ix = parent.child(i, 0)
model.setData(ix, Qt.Unchecked, Qt.CheckStateRole)
return value
def main():
app = QApplication(sys.argv)
tree = QTreeWidget()
tree.setItemDelegate(Delegate())
for i in range(3):
parent = QTreeWidgetItem(tree)
parent.setText(0, "Parent {}".format(i))
for x in range(5):
child = QTreeWidgetItem(parent)
child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
child.setText(0, "Child {}".format(x))
child.setCheckState(0, Qt.Unchecked)
tree.expandAll()
tree.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.