سؤال

guys!I have a two QTreeView trees and one QPushButton. How I understand on what tree item i clicked?For example, i clicked on item which in treeView1, and get message like this: "You select item in treeView1"

def button(self):
    index = self.treeView1.currentIndex()
    node = index.internalPointer()
    if node is not None:
         print("You select item in treeView1 " + node.name())
    else:
         index = self.treeView2.currentIndex()
         node = index.internalPointer()
         print("You select item in treeView2 " + node.name())

It works, but it very bad solution, i think.. How i shuold do this example? Thanks a lot! Sorry for my english:)

هل كانت مفيدة؟

المحلول

This is fairly easy.

first you setup two signals

QtCore.QObject.connect(self.treeView1 , QtCore.SIGNAL("clicked (const QModelIndex&)") , self.clickedTree1)
QtCore.QObject.connect(self.treeView2 , QtCore.SIGNAL("clicked (const QModelIndex&)") , self.clickedTree2)

once you have setup the signals, you need to define the slots def clickedTree1(self,index) and def clickedTree2 (self,index).

def clickedTree1(self,index):
    node = index.internalPointer()
    print("You select item in treeView1 " + node.name())

def clickedTree2(self,index):
    node = index.internalPointer()
    print("You select item in treeView2 " + node.name())

UPDATE


Ok , i read the question again and i figured that you want to print when the push button is clicked.

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(616, 276)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
        self.verticalLayout = QtGui.QVBoxLayout()
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.treeView = QtGui.QTreeView(self.centralwidget)
        self.treeView.setObjectName(_fromUtf8("treeView"))
        self.horizontalLayout.addWidget(self.treeView)
        self.treeView_2 = QtGui.QTreeView(self.centralwidget)
        self.treeView_2.setObjectName(_fromUtf8("treeView_2"))
        self.horizontalLayout.addWidget(self.treeView_2)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.verticalLayout.addWidget(self.pushButton)
        self.verticalLayout_2.addLayout(self.verticalLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 616, 21))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.treeView1 , QtCore.SIGNAL("clicked (const QModelIndex&)") , self.clickedTree1)
        QtCore.QObject.connect(self.treeView2 , QtCore.SIGNAL("clicked (const QModelIndex&)") , self.clickedTree2)
        QtCore.QObject.connect(self.pushButton , QtCore.SIGNAL("clicked()"),self.pushed)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8))

    def clickedTree1(self,index):
        self.node = index.internalPointer()
        self.Tree = 1

    def clickedTree2(self,index):
        self.node = index.internalPointer()
        self.Tree = 2

    def pushed(self):
        print("You select item in treeView{0} ".format(self.Tree) + node.name())
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top