2016-10-14 2 views
2

私はPyQt4を使用しています。私はQPushButtonを持っているので、今度はそれを繰り返したい。ボタンをクリックすると、csvファイルからQTableWidgetにデータが読み込まれます。しかし、一度に表示するケースは1つだけです。QPushButtonを反復する

たとえば、csvにはヘッダーを除いた1000行があります。ヘッダからテーブルウィジェットにヘッダを割り当てる必要があります。その下に1行だけ表示します。クリックすると、同じ行に次の行情報が表示されます。私は少し異なる構文で以下のコードを投稿しています。私はそれを除外したいと思うヘッダーのためのdbの構文を表示しました。

.uiファイルを追加しました。あなたは.uiとして直接保存することができます:ボタンがクリックされた今までに、イテレータは0または今までそれが割り当てられていたものを1に設定されたばかり

<?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行のうち1行だけを表示し、クリックすると次の行に変更する必要があるため、新しいケースが発生するはずです。P –

+0

@Schollii main.uiが追加されました...独立mysqlの...それはテーブルのウィジェットの単一の列を表示するクリックして同じ行の場所に1行だけをロードする反復することです:P –

答えて

0

主な問題でした、。したがって、変数をクラスの外に割り当て、それをクラスに呼び出して、ループ構造を維持します。

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