Python-kurssin lopputyötä ajatellen kysyisin asiantuntijoilta peruskysymyksen, pystyykö Python 3.2 ohjelmalla määrittelemään funktion/funktioita, jotka päivittävät solujen arvoja, laskevat kahden eri solun arvoja yhteen kolmanteen ja mahdollisesti tallentavat ne niin, että uudella avauskerralla taulukossa olisi talletetetut arvot. Ohessa osa koodista. Taulukkopohja tehty designerillä itemsit python 3.2 sekä vihjeeksi aiemmin sääty funktio, miten reagoidaan heti siihen, että käyttäjä on päivittänyt solua.
# -*- coding utf-8 -*- import sys from PyQt4.QtGui import * from PyQt4.QtCore import * from FormulaIkkuna import Ui_MainWindow class StartQt4(QMainWindow): def __init__(self, parent=None): QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.dr_taulu.setHorizontalHeaderItem(0,QTableWidgetItem("Sukunimi")) self.ui.dr_taulu.setHorizontalHeaderItem(1,QTableWidgetItem("Etunimi")) self.ui.dr_taulu.setHorizontalHeaderItem(2,QTableWidgetItem("Pisteet (ok)")) self.ui.dr_taulu.setHorizontalHeaderItem(3,QTableWidgetItem("Vanhat")) self.ui.dr_taulu.setHorizontalHeaderItem(4,QTableWidgetItem("Uudet")) self.ui.dr_taulu.setItem(0,0,QTableWidgetItem("Vettel")) self.ui.dr_taulu.setItem(1,0,QTableWidgetItem("Webber")) self.ui.dr_taulu.setItem(2,0,QTableWidgetItem("Button")) self.ui.dr_taulu.setItem(3,0,QTableWidgetItem("Hamilton")) self.ui.dr_taulu.setItem(4,0,QTableWidgetItem("Alonso")) self.ui.dr_taulu.setItem(0,2,QTableWidgetItem(str("0"))) self.ui.dr_taulu.setItem(1,2,QTableWidgetItem(str("0"))) self.ui.dr_taulu.setItem(2,2,QTableWidgetItem(str("0"))) self.ui.dr_taulu.setItem(3,2,QTableWidgetItem(str("0"))) self.ui.dr_taulu.setItem(4,2,QTableWidgetItem(str("0"))) @pyqtSlot(int,int) def on_dr_taulu_cellChanged(self,row,col): tieto = self.ui.dr_taulu.item(row,col) if __name__ == "__main__": app = QApplication(sys.argv) myapp = StartQt4() myapp.show() sys.exit(app.exec_())
Luonnollisesti taulukossa on muutkin solut, mutta tällä varmaankin selvinnee, jos haluaisin laskea/päivittää osakilpailupisteet ja vanhat pisteet yhteen kokonaispisteisiin. Kiitoksia tiedoista. En ole googlaamalla löytänyt vielä vastausta.
Olisit vain käyttänyt erillistä item modelia ja QTableViewiä tuon widgetin sijaan. Mielestäni niillä on mukavampaa puljailla. Eikä tähän tarvita Googlea vaan ihan koodin kirjoittamista.
Tuossapa jotain esimerkkiä: http://pastebin.com/2cmmkf9k
En ole niin hirveästi Pythonilla koodaillut, joten pahoittelut, jossei koodi ihan parhaita Python-käytäntöjä noudata. Esimerkissä siis yhteispisteiden näyttö, tiedostoon (tai tietokantaan) tallentamisen voinet yrittää implementoida itse. Suosittelen pyöräyttämään pienen SQLite-kannan ja sinne tallentamaan tiedot, niin ei tarvitse omia tiedostoformaatteja kehitellä.
Kiitoksia The Alchemist. Tuo TableView on kyllä hyvä vaihtoehto ja siihen kyllä löytyy useampiakin koodinpätkiä. You Tubesta löytyy ihan TableModelView- videoesimerkkikin. Katsotaan nyt kun kokeilen tuota koodiehdotustasi, mitä siitä syntyy, vai olisiko järkevämpi ajatella pythonin ja sqliten yhteistyötä.
Olet oikeassa, että vain harjoittelemalla koodausta oppii enemmän. Kaikki mitä kurssilla opetettiin velloo vaan nyt ajatuksina tätä lopputyötä ajatellen.
Voit sinä SQLiteä käyttää joka tapauksessa ja niinhän jo minäkin sitä suosittelin. Qt:ssa on valmiina QSqlTableModel, mutta toisaalta näin yksinkertaisessa projektissa voi olla parempi pitäytyä erossa siitä ja vain laajentaa tuota taulukkomalliani save()- ja load()-funktioilla, jotka kirjoittavat ja lukevat tietokannasta kaiken datan yhdellä kertaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.