PyQt ikkunan näkyminen

Hei

Miten saadaan PyQt näyttämään heti ajettavan ohjelman ikkunan.

Eli PyQt:llä tehty ohjelma (koe.pyw) lukee tiedostoa.
Tiedosto (tiedosto.txt) joko on tai ei ole kovalevyllä, kun koe.pyw käynnistetään.
Jos se on levyllä luetaan heti ja käsitellään saatu data.

Jos tiedostoa ei ole ole levyllä, odotetaan sen ilmestymistä levylle XX sekunttia.
Odotusaikana pitäisi näkyä ProgressBar kertomassa käyttäjälle, että jotain tapahtuu.

koe.pyw koodi toimii, jos tiedosto.txt ei ole, mutta ohjelman ikkuna ilmestyy näkyviin vasta, kun progressBar on täydet 100%

Ikkunan ollessa näkyvissä ohjelma toimii haltulla tavalla, kun painettaan Feikki nappulaa. ProgressBar palkki etenee kohti 100%.
Palkki pysähtyy, jos tiedosto.txt “ilmestyy” levylle.

Siis lyhyesti. Miten ajettavan ohjelman ikkunassa olevat tiedot saa heti näkyviin ohjelman käynnistyksen jälkeen, ilman nappuloiden painamista.
Nyt se ilmestyy, kun ohjelmassa on päästy client.show() riville.

PyQt on sotkettu asiaan mukaan kahdesta syystä

  • esimerkki on riisuttu, Käyttöliittymää tarvitaan myöhemmin
  • halu oppia miten PyQt toimii

Kaarme42

[code]import sys, time
from PyQt4 import QtGui
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class GuiPart(QDialog):
def init(self, rsPort, port, parent=None):
super(GuiPart, self).init(parent)

    self.lueLabel = QLabel("Löytyykö tiedostoa")
    self.feikkiButton = QPushButton("Feikki nappula")
    
    self.barra = QtGui.QProgressBar()    
    
    self.barra.setMinimum(0) 
    self.barra.setMaximum(10)

    grid = QGridLayout()
    grid.addWidget(self.lueLabel, 1, 0)
    
    grid.addWidget(self.barra, 1, 1)
    grid.addWidget(self.feikkiButton, 2, 1)
    
    
    self.connect(self.feikkiButton, SIGNAL("clicked()"), self.lue)
            
    self.setWindowTitle("Viive luku")
           
    self.setLayout(grid)
    self.lue()

#-------------------------------------------------------------------------

def tiedosto(self):
    time.sleep(1)
    try:
        kahva = open("tiedosto.txt","r", encoding="utf-8")             
    except:            
        kahva = False
    
    return(kahva)

def lue(self):
    a=0
    self.barra.setValue(a)
    for a in range(11):
        xmldoc = self.tiedosto()
        if xmldoc != False:
            print("Oli")
            break
        else:
            print("Ei ole")
            xmldoc = None

        self.barra.setValue(a)

root = QtGui.QApplication(sys.argv)
client = GuiPart(None, None)
client.show()
sys.exit(root.exec_()) [/code]

En oo kokeillut koodia, mutta pikaisella vilkaisulla sullahan on ihan lopussa vasta client.show(), eli silloin oliota käsketään vasta näkymään. Eli ohjelma suorittaa kaiken muun ja avaa vasta sitten ikkunan. Siirrä olion luonti ja näyttäminen (show) ennen kuin käynnistät function “lue”.

Moi

Kiitos nopeasta vastauksesta

" sullahan on ihan lopussa vasta client.show(), eli silloin oliota käsketään vasta näkymään. Eli ohjelma suorittaa kaiken muun ja avaa vasta sitten ikkunan. Siirrä olion luonti ja näyttäminen (show) ennen kuin käynnistät function “lue”."

Juu noinhan ohjelma juurikin tekee :astonished:

Tosiaankin PyQt vasta opetellan. Seurasin ohjettasi ja kokeilin

root = QtGui.QApplication(sys.argv)
client = GuiPart(None, None)
client.show()
client.lue()
sys.exit(root.exec_())

Nyt näyttäisi toimivan, mutta onkohan ajatus oikein ?

En tiedä mitä tarkotat ajatuksella?

Ajatuksella tarkoitin tapaa jolla sain koodin toimimaan haluamallani tavalla.
Eli onko se tehty järkevästi vai hassusti, mutta silti (tässätapauksessa) saatu haluttu toiminta

Siihen en osaa sanoa mitään, ei oo tullut koodattua PyQt:lla :wink:

Itse olen kohdannut Pygtklla ja kyllä siinä ainakin kutsutaan ikkunan show (tai show_all) metodia kun halutaan käyttöliittymä näkyviin. Käyttöliittymänä kuuluvia osia voi muokata senkin jälkeen ja kun tekemiset on tehty kutsutaan gtk.main().