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_())
請發佈main.ui,以便我們可以運行它(看起來只需要進行小修改,使其獨立於mysql)。 – Schollii
將添加main.ui,但重點是如何迭代按鈕?當我點擊,新的情況應該來,因爲我想只顯示完整的csv行中的一行,並點擊它應該改變到下一行:P –
@Schollii main.ui添加和...它不是主要的獨立的mysql ...它是迭代它來顯示錶格小部件中的單列和點擊加載只有一行到同一行的地方:P –