2016-10-14 71 views
2

我正在使用PyQt4。我有一個QPushButton,現在我想重複它。點擊按鈕時,它應該將csv文件中的數據加載到QTableWidget中。但我只想一次顯示一個案例。迭代QPushButton

例如,csv有1000行,不包括標題。現在它應該將標題分配給來自標題的表格控件。並在其下面只顯示一行。所以點擊時,它應該在同一行顯示下一行信息。我使用幾乎不同的語法發佈代碼。我顯示了頭的db語法,我也想排除它。

我添加了.ui文件。您可以直接保存爲的.ui:

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>remarks</class> 
<widget class="QMainWindow" name="remarks"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>1073</width> 
    <height>862</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>MainWindow</string> 
    </property> 
    <widget class="QWidget" name="centralwidget"> 
    <widget class="QComboBox" name="compcb"> 
    <property name="geometry"> 
    <rect> 
     <x>60</x> 
     <y>360</y> 
     <width>131</width> 
     <height>27</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QComboBox" name="loccb"> 
    <property name="geometry"> 
    <rect> 
     <x>60</x> 
     <y>410</y> 
     <width>131</width> 
     <height>27</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QComboBox" name="rescb"> 
    <property name="geometry"> 
    <rect> 
     <x>60</x> 
     <y>460</y> 
     <width>131</width> 
     <height>27</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QLineEdit" name="lat"> 
    <property name="geometry"> 
    <rect> 
     <x>60</x> 
     <y>540</y> 
     <width>113</width> 
     <height>27</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QLineEdit" name="lon"> 
    <property name="geometry"> 
    <rect> 
     <x>60</x> 
     <y>590</y> 
     <width>113</width> 
     <height>27</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QLineEdit" name="landmark"> 
    <property name="geometry"> 
    <rect> 
     <x>330</x> 
     <y>360</y> 
     <width>113</width> 
     <height>27</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QPlainTextEdit" name="sugges"> 
    <property name="geometry"> 
    <rect> 
     <x>330</x> 
     <y>410</y> 
     <width>121</width> 
     <height>78</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QPlainTextEdit" name="plainTextEdit_2"> 
    <property name="geometry"> 
    <rect> 
     <x>330</x> 
     <y>510</y> 
     <width>121</width> 
     <height>78</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QTableWidget" name="tableWidget"> 
    <property name="geometry"> 
    <rect> 
     <x>20</x> 
     <y>10</y> 
     <width>991</width> 
     <height>311</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QPushButton" name="submit"> 
    <property name="geometry"> 
    <rect> 
     <x>350</x> 
     <y>670</y> 
     <width>99</width> 
     <height>41</height> 
    </rect> 
    </property> 
    <property name="font"> 
    <font> 
     <pointsize>12</pointsize> 
     <weight>50</weight> 
     <bold>false</bold> 
    </font> 
    </property> 
    <property name="text"> 
    <string>Submit</string> 
    </property> 
    </widget> 
    </widget> 
    <widget class="QMenuBar" name="menubar"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>1073</width> 
    <height>25</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QStatusBar" name="statusbar"/> 
</widget> 
<resources/> 
<connections/> 
</ui> 
from PyQt4 import QtCore, QtGui, uic 
from PyQt4.QtCore import QString 

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

import MySQLdb 
import os 
import time 
import sys 
import csv 

### Loading .UI file ### 
rts_class = uic.loadUiType("main.ui")[0] 

class Mainwindow(QtGui.QMainWindow, rts_class): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 

     #self.review.clicked.connect(self, review_application) 
     self.submit.clicked.connect(self.submit_application) 
     #self.quit.clicked.connect(self, quit_application 

     self.load_db() 
     self.checkbox() 

    def load_db(self): 
     self.dadis.setRowCount(1) 
     self.dadis.setColumnCount(headlen) 
     self.dadis.setHorizontalHeaderLabels(QString('%s' % ', '.join(map(str, mainheader))).split(",")) 

     if os.path.isfile("RTS.csv") is True: 
      with open('RTS.csv', 'r') as fo: 
       reader = csv.reader(fo, delimiter = ',') 
       ncol = len(next(reader)) 
       data = list(reader) 
       row_count = len(data) 

       print row_count 
       main = data[0] 

       print main 

       for var in range(0, ncol):             
        self.dadis.setItem(0, var, QTableWidgetItem(main[var])) 

       fo.close() 

    def checkbox(self): 
     self.compcb.addItem(" ") 
     self.compcb.addItem("Complete") 
     self.compcb.addItem("InComplete") 

     self.loccb.addItem(" ") 
     self.loccb.addItem("Locatable") 
     self.loccb.addItem("UnLocatable") 

     self.rescb.addItem(" ") 
     self.rescb.addItem("House") 
     self.rescb.addItem("Street") 
     self.rescb.addItem("Colony") 
     self.rescb.addItem("Society")    

    def submit_application(self): 
     compout = self.compcb.currentText() 
     locout = self.loccb.currentText() 
     resout = self.rescb.currentText() 
     lattxt = self.lat.text() 
     lontxt = self.lon.text() 
     landtxt = self.landmark.text() 
     suggestxt = self.sugges.toPlainText() 
     remarkstxt = self.remarks.toPlainText() 

     print compout 
     print locout 
     print resout 
     print lattxt 
     print lontxt 
     print landtxt 
     print suggestxt 
     print remarkstxt 

     if os.path.isfile("rts_output.csv") is False: 

      with open('rts_output.csv', 'a') as fp: 
       b = csv.writer(fp, delimiter = ',') 
       header = [["COMPLETENESS", "LOCATABLE", "RESOLUTION", "GEO_LAT", "GEO_LON", "LANDMARK", "SUGGESTION", "REMARKS"]] 
       b.writerows(header) 

     if os.path.isfile("rts_output.csv") is True: 

      with open('rts_output.csv', 'a') as fp: 
       a = csv.writer(fp, delimiter = ',') 
       data = [[compout, locout, resout, lattxt, lontxt, landtxt, suggestxt, remarkstxt]] 
       a.writerows(data) 

     if os.path.isfile("RTS.csv") is True: 

      with open('RTS.csv', 'r') as fo: 
       reader = csv.reader(fo, delimiter = ',') 
       ncol = len(next(reader)) 
       data = list(reader) 
       row_count = len(data) 

       x = data[0][0] 
       print x 

       i = int(x)+1 
       print i 

       if i <= row_count: 

        main = data[i-1] 

        print main 

       #for var in range(0, ncol):             
        #self.dadis.setItem(0, var, QTableWidgetItem(main[var])) 

      fo.close() 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    myMain = Mainwindow() 
    myMain.show() 
    sys.exit(app.exec_()) 
+0

請發佈main.ui,以便我們可以運行它(看起來只需要進行小修改,使其獨立於mysql)。 – Schollii

+0

將添加main.ui,但重點是如何迭代按鈕?當我點擊,新的情況應該來,因爲我想只顯示完整的csv行中的一行,並點擊它應該改變到下一行:P –

+0

@Schollii main.ui添加和...它不是主要的獨立的mysql ...它是迭代它來顯示錶格小部件中的單列和點擊加載只有一行到同一行的地方:P –

回答

0

的主要問題是,當被點擊的按鈕不斷,迭代器是越來越設置爲0或1以往任何時候都被分配了什麼。因此,在類外部分配變量並將其調用到類中以維護循環結構。

class staticVariable: 
    static_count_clicked = 1 

class Mainwindow(QtGui.QMainWindow, rts_class): 
    def __init__(self, parent=None, *args, **kwargs): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 

     self.submit.clicked.connect(self.submit_application) 

    def submit_application(self, count_clicked): 

     staticVariable.static_count_clicked += 1 
     print staticVariable.static_count_clicked