Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 892
God aften kjære medborgere! Jeg har et problem; jeg skal lage et lite program i python og bruke Tkinter modulen. Jeg har en liten kode som jeg trenger i det samme programmet for å vise den teksten jeg ønsker.

Tkinter:

Kode

from Tkinter import *

class Application(Frame):
    def createWidgets(self):
        self.bdate = Button(self)
        self.bdate["text"] = "test"
        self.bdate.pack({"side": "left"})
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

root = Tk()
app = Application(master=root)
app.mainloop()
root.destroy()
Annen kode:

Kode

from time import strftime
dager = 32
dato = int(strftime("%d"))
sdato = 0
while True:
    if dato != sdato:
        dato = int(strftime("%d"))
        sdato = dato
        print(dager - dato)
Jeg vil slå disse sammen til ett program og hvise (dager - dato) på knappen i Tkinter, men når jeg bruker en while True loop virker ingenting. Noen som har forslag til hvordan jeg kan gjøre det?
du kan ikke ha "while true" løkker på den måten. Da vil aldri resten av logikken i gui-tråden bli utført og den får ikke oppdatert vinduet og gjort "tkinter-logikken" som må gjøres ved hver skjermoppdatering. Dette fører til at vinduet kræsjer.

Vil anbefale deg å bruke en timer som f.eks. oppdateres 10 ganger i sekunder, og oppdatere klokke-delen i denne.

altså noe lignende det du ser på StackOverflow her: http://stackoverflow.com/questions/2...gui-in-tkinter
Sist endret av etse; 30. august 2013 kl. 20:58.
High Magus
10100's Avatar
Trådstarter
Det virket med å lage en timer Koden hvis noen er interessert:

Kode

import Tkinter as tk
import time
from time import strftime

dager = 32
dato = 1
sdato = 0

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(text="")
        self.label.pack()
        self.update_clock()
        self.root.mainloop()

    def update_clock(self):
        global dato, dager, sdato
        now = (dager - dato)
        self.label.configure(text=now)
        self.root.after(1000, self.update_clock)
        if dato != sdato:
            dato = int(strftime("%d"))
            sdato = 0

app=App()
app.mainloop()
feedback: ikke bruk globale veriabler med mindre du har en veldig god forklaring på hvorfor du akkurat må ha de globale. Lagre verdiene i objektet i stede. Normalt er det eneste du har globalt enkelte konstanter, som du aldri endrer verdien på. (disse skal også tydeliggjøres at er konstanter ved at navnet skal være med store bokstaver)