2017-10-04 46 views
0

这是我的调用者文件,它可以帮助我生成可以写入数据的表格的ui。这里的问题是我想按照表格的标题点击数据时对数据进行排序柱。我可以很容易地对数据进行排序,因为我有一个后端数据(不存在于此代码中,因为在此处不需要),但我无法在表头的标头上应用点击功能。我想在不同的表头上应用clicked.connect。在此先感谢:)在pyqt中点击桌面标题

from table import * 
from PyQt4 import QtGui # Import the PyQt4 module we'll need 
import sys # We need sys so that we can pass argv to QApplication 
import os 

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


class MainWindow(QMainWindow,Ui_MainWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent) 
     self.setupUi(self) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_()) 

这是我的table.py具有UI代码:

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'table.ui' 
# 
# Created by: PyQt4 UI code generator 4.11.4 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(800, 600) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.gridLayout = QtGui.QGridLayout(self.centralwidget) 
     self.gridLayout.setObjectName(_fromUtf8("gridLayout")) 
     self.tableWidget = QtGui.QTableWidget(self.centralwidget) 
     self.tableWidget.setObjectName(_fromUtf8("tableWidget")) 
     self.tableWidget.setColumnCount(3) 
     self.tableWidget.setRowCount(3) 
     item = QtGui.QTableWidgetItem() 
     self.tableWidget.setVerticalHeaderItem(0, item) 
     item = QtGui.QTableWidgetItem() 
     self.tableWidget.setVerticalHeaderItem(1, item) 
     item = QtGui.QTableWidgetItem() 
     self.tableWidget.setVerticalHeaderItem(2, item) 
     item = QtGui.QTableWidgetItem() 
     self.tableWidget.setHorizontalHeaderItem(0, item) 
     item = QtGui.QTableWidgetItem() 
     self.tableWidget.setHorizontalHeaderItem(1, item) 
     item = QtGui.QTableWidgetItem() 
     self.tableWidget.setHorizontalHeaderItem(2, item) 
     self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 31)) 
     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.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     item = self.tableWidget.verticalHeaderItem(0) 
     item.setText(_translate("MainWindow", "New Row", None)) 
     item = self.tableWidget.verticalHeaderItem(1) 
     item.setText(_translate("MainWindow", "New Row", None)) 
     item = self.tableWidget.verticalHeaderItem(2) 
     item.setText(_translate("MainWindow", "New Row", None)) 
     item = self.tableWidget.horizontalHeaderItem(0) 
     item.setText(_translate("MainWindow", "Name", None)) 
     item = self.tableWidget.horizontalHeaderItem(1) 
     item.setText(_translate("MainWindow", "class", None)) 
     item = self.tableWidget.horizontalHeaderItem(2) 
     item.setText(_translate("MainWindow", "marks", None)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

回答

0
self.connect(self.tableWidget.horizontalHeader(),SIGNAL("sectionClicked(int)"),self.fun) 

def fun(self,i): 
    print("index clicked is"+i) 
+3

你可以突出你的解决方案如何解决了OP的问题?从目前的答案中,很难确定解决问题的方法。 – thomaux

+0

我添加的这个函数作为答案帮助我返回表单中点击的标题的索引。 –

+0

你必须参考pyqt中的qtableview头连接 –