Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将按钮添加到QTreeView行_Python_Qt_Pyqt_Pyqt4_Qtreeview - Fatal编程技术网

Python 如何将按钮添加到QTreeView行

Python 如何将按钮添加到QTreeView行,python,qt,pyqt,pyqt4,qtreeview,Python,Qt,Pyqt,Pyqt4,Qtreeview,我有这个代码有标签和树视图。 我希望树视图中的每一行都有一些小按钮。 如何将按钮添加到一行树状视图 import sys from PyQt4.QtCore import * from PyQt4.QtGui import * class tabdemo(QTabWidget): def __init__(self, parent=None): super(tabdemo, self).__init__(parent) self.setGeometry(300,

我有这个代码有标签和树视图。 我希望树视图中的每一行都有一些小按钮。 如何将按钮添加到一行树状视图

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class tabdemo(QTabWidget):
    def __init__(self, parent=None):
      super(tabdemo, self).__init__(parent)
      self.setGeometry(300, 300, 500, 300)
      self.tab1 = QWidget()
      self.tab2 = QWidget()
      self.tab3 = QWidget()


      self.addTab(self.tab1, "Tab 1")
      self.addTab(self.tab2, "Tab 2")
      self.addTab(self.tab3, "Tab 3")
      self.tab1UI()
      self.tab2UI()
      self.tab3UI()
      self.setWindowTitle("tab demo")

    def tab3UI(self):
      layout = QFormLayout()
      layout.addRow("Name", QLineEdit())
      layout.addRow("Address", QLineEdit())
      self.setTabText(0, "Contact Details")
      self.tab3.setLayout(layout)

    def tab2UI(self):
      layout = QFormLayout()
      sex = QHBoxLayout()
      sex.addWidget(QRadioButton("Male"))
      sex.addWidget(QRadioButton("Female"))
      layout.addRow(QLabel("Sex"), sex)
      layout.addRow("Date of Birth", QLineEdit())
      self.setTabText(1, "Personal Details")
      #self.button.clicked.connect(self.handleButton)
      self.tab2.setLayout(layout)



    def tab1UI(self):
        layout =  QGridLayout()
        layout.addWidget(QLabel("subjects"), 0, 0) 
        layout.addWidget(QCheckBox("Physics"), 0, 1)
        layout.addWidget(QCheckBox("Maths"), 0, 2)

        view = QTreeView()
        view.setSelectionBehavior(QAbstractItemView.SelectRows)
        model = QStandardItemModel()
        model.setHorizontalHeaderLabels(['col1', 'col2', 'col3'])
        view.setModel(model)
        view.setUniformRowHeights(True)
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        # populate data
        for i in range(3):
            parent1 = QStandardItem('Family {}. Some long status text for sp'.format(i))
            parent1.setCheckable(True)
            for j in range(3):
                child1 = QStandardItem('Child {}'.format(i * 3 + j))
                child2 = QStandardItem('row: {}, col: {}'.format(i, j + 1))
                child3 = QStandardItem('row: {}, col: {}'.format(i, j + 2))
            parent1.appendRow([child1, child2, child3])
            model.appendRow(parent1)
            # span container columns
            view.setFirstColumnSpanned(i, view.rootIndex(), True)
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        # expand third container
        index = model.indexFromItem(parent1)
        view.expand(index)
        # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        # select last row
        selmod = view.selectionModel()
        index2 = model.indexFromItem(child3)
        selmod.select(index2, QItemSelectionModel.Select | QItemSelectionModel.Rows)


        layout.addWidget(view , 1, 0)
        self.setTabText(2, "Education Details")

        self.tab1.setLayout(layout)




def main():
   app = QApplication(sys.argv)
   ex = tabdemo()
   ex.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

QStandardItemModel
是一个模型,它只包含数据。视图及其委托处理可视化


也许您的用例更好地使用
QTreeWidget
并使用其
setItemWidget()
功能

QStandardItemModel
是一个模型,它只包含数据。视图及其委托处理可视化


也许您的用例更好地使用
QTreeWidget
并使用其
setItemWidget()
功能

您可以使用
setIndexWidget
在行的任何列上设置小部件:

class tabdemo(QTabWidget):
    ...
    def tab1UI(self):
        for i in range(3):
            parent1 = QStandardItem('Family {}. Some long status text for sp'.format(i))
            parent1.setCheckable(True)
            model.appendRow(parent1)
            for j in range(3):
                child1 = QStandardItem('Child {}'.format(i * 3 + j))
                child2 = QStandardItem('row: {}, col: {}'.format(i, j + 1))
                child3 = QStandardItem('row: {}, col: {}'.format(i, j + 2))
                child4 = QStandardItem()
                parent1.appendRow([child1, child2, child3, child4])
                button = QToolButton()
                button.setMaximumSize(button.sizeHint())
                view.setIndexWidget(child4.index(), button)

您可以使用
setIndexWidget
在行的任何列上设置小部件:

class tabdemo(QTabWidget):
    ...
    def tab1UI(self):
        for i in range(3):
            parent1 = QStandardItem('Family {}. Some long status text for sp'.format(i))
            parent1.setCheckable(True)
            model.appendRow(parent1)
            for j in range(3):
                child1 = QStandardItem('Child {}'.format(i * 3 + j))
                child2 = QStandardItem('row: {}, col: {}'.format(i, j + 1))
                child3 = QStandardItem('row: {}, col: {}'.format(i, j + 2))
                child4 = QStandardItem()
                parent1.appendRow([child1, child2, child3, child4])
                button = QToolButton()
                button.setMaximumSize(button.sizeHint())
                view.setIndexWidget(child4.index(), button)
如果“按钮”是指每行开头的按钮的简单图像,则可以使用
QStandardItem::setData(const QVariant&value,int role=Qt::UserRole+1)
,其中role=
Qt::DecorationRole
和值为
QIcon
QPixmap

如果你想要一个<代码> QPushButton <代码>,那么你可以考虑通过继承<代码> qSytListItMeCuto < /Cuff>来创建自定义委托,并呈现一个特定的模型显示。

< P>如果“Button”是指每行开始时的一个按钮的简单图像,你可以使用<代码> qStaldIt::StDATA。(const QVariant&value,int role=Qt::UserRole+1)其中role=
Qt::DecorationRole
和值为
QIcon
QPixmap


例如,如果你想要一个<代码> QPushButton <代码>,那么你可以考虑通过继承<代码> qSytListItMeCuto < /Cuff>来创建自定义委托,并呈现模型的具体显示。

NB:如果你还有其他问题,请NB:如果你还有其他问题,请。