r2d290 Skrevet 5. august 2010 Del Skrevet 5. august 2010 Heisann. Jeg bruker TKinter og har fulgt Denne guiden for å opprette en boks man kan skrive i, og få fokus i denne boksen. Nå vil jeg lage to bokser man kan skrive i, og få fokus i den første av de to boksene. Problemet er at fokuset havner i den siste, og jeg ønsker at den skal starte i den første boksen. Hvordan gjør jeg dette? Jeg lager to tekst-bokser her: self.entryVariable1 = Tkinter.StringVar() self.entry = Tkinter.Entry(self, textvariable=self.entryVariable1) self.entry.grid(column=0, row=0, sticky='EW') self.entry.bind("<Return>", self.OnPressEnter) self.entryVariable1.set(u"Enter text here.") self.entryVariable2 = Tkinter.StringVar() self.entry = Tkinter.Entry(self, textvariable=self.entryVariable2) self.entry.grid(column=1, row=0, sticky='EW') self.entry.bind("<Return>", self.OnPressEnter) self.entryVariable2.set(u"Enter text here.") og så linja for fokus litt lenger ned: self.entry.focus_set() self.entry.selection_range(0, Tkinter.END) Legger hele koden i spoiler nedenfor hvis det er noe informasjon jeg ikke har gitt #!/usr/bin/python # -*- coding: utf-8 -*- import Tkinter class simpleapp_tk(Tkinter.Tk): def __init__(self,parent): Tkinter.Tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): self.grid() self.entryVariable1 = Tkinter.StringVar() self.entry = Tkinter.Entry(self, textvariable=self.entryVariable1) self.entry.grid(column=0, row=0, sticky='EW') self.entry.bind("<Return>", self.OnPressEnter) self.entryVariable1.set(u"Enter text here.") self.entryVariable2 = Tkinter.StringVar() self.entry = Tkinter.Entry(self, textvariable=self.entryVariable2) self.entry.grid(column=1, row=0, sticky='EW') self.entry.bind("<Return>", self.OnPressEnter) self.entryVariable2.set(u"Enter text here.") button = Tkinter.Button(self, text=u"Click me !", command=self.OnButtonClick) button.grid(column=2, row=0) self.labelVariable = Tkinter.StringVar() label = Tkinter.Label(self, textvariable=self.labelVariable, anchor="w", fg="white", bg="blue") label.grid(column=0, row=2, columnspan=2, sticky='EW') self.labelVariable.set(u"Hello !") self.grid_columnconfigure(0, weight=1) self.resizable(True, False) self.update() self.geometry(self.geometry()) self.entry.focus_set() self.entry.selection_range(0, Tkinter.END) def OnButtonClick(self): self.labelVariable.set(self.entryVariable1.get()+self.entryVariable2.get()+" (You clicked the button !") self.entry.focus_set() self.entry.selection_range(0, Tkinter.END) def OnPressEnter(self, event): self.labelVariable.set(self.entryVariable1.get()+self.entryVariable2.get()+" (You pressed enter !") self.entry.focus_set() self.entry.selection_range(0, Tkinter.END) if __name__ == "__main__": app = simpleapp_tk(None) app.title('my application') app.mainloop() Lenke til kommentar
snippsat Skrevet 6. august 2010 Del Skrevet 6. august 2010 Da skulle det væe greit,problemet var at self.entry var lik på begge tekstbokser. Og da lese den andre tekstboksen sist. import Tkinter class simpleapp_tk(Tkinter.Tk): def __init__(self,parent): Tkinter.Tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): self.grid() self.entryVariable1 = Tkinter.StringVar() self.entry1 = Tkinter.Entry(self, textvariable=self.entryVariable1) self.entry1.grid(column=0, row=0, sticky='EW') self.entry1.bind("<Return>", self.OnPressEnter) #self.entryVariable1.set(u"Enter text here.") self.entryVariable2 = Tkinter.StringVar() self.entry = Tkinter.Entry(self, textvariable=self.entryVariable2) self.entry.grid(column=1, row=0, sticky='EW') self.entry.bind("<Return>", self.OnPressEnter) #self.entryVariable2.set(u"Enter text here.") button = Tkinter.Button(self, text=u"Click me !", command=self.OnButtonclick) button.grid(column=2, row=0) self.labelVariable = Tkinter.StringVar() label = Tkinter.Label(self, textvariable=self.labelVariable, anchor="w", fg="white", bg="blue") label.grid(column=0, row=2, columnspan=2, sticky='EW') self.labelVariable.set(u"Hello !") self.grid_columnconfigure(0, weight=1) self.resizable(True, False) self.update() self.geometry(self.geometry()) self.entry1.focus_set() self.entry.selection_range(0, Tkinter.END) def OnButtonclick(self): self.labelVariable.set(self.entryVariable1.get()+self.entryVariable2.get()) self.entry.focus_set() self.entry.selection_range(0, Tkinter.END) def OnPressEnter(self, event): self.labelVariable.set(self.entryVariable1.get()+self.entryVariable2.get()) self.entry.focus_set() self.entry.selection_range(0, Tkinter.END) if __name__ == "__main__": app = simpleapp_tk(None) app.title('my application') app.mainloop() Nå bruker jeg ikke tkinter finner wxpython mye bedere. Tkinter ser ikke bra ut i windows,og for meg er dette ikke godt nok. Last ned wxdemo,kan være smart her ser du det meste av hva wxpython har og by på. Heter win32-docs-demos. Jeg har pakket ut til c:\demo Starter den sånn fra en py fil. import os os.system('python C:\demo\demo\demo.py') Da ser det sånn ut når det virker. Lenke til kommentar
r2d290 Skrevet 6. august 2010 Forfatter Del Skrevet 6. august 2010 Takk skal du ha. Funka fjell nå Tror jeg skal se nermere på wxpython etter hvert ja. Så blir neste spørsmålet: Hvordan får jeg innholdet i en av disse boksene til å bli variabler tilsvarende de jeg har laget i andre program uten GUI? Ta for eksempel programmet jeg la ut tidligere med fractions. Markerer med stjerne på de linjene jeg har gjort endringer, i forsøk på å få det til. (Det jeg ønsker med koden er at jeg skal kunne skrive 3/6, også skal den printe ut 1/2. Tilsvarende denne koden uten gui: import fractions import Tkinter a = raw_input('r1, k1: ') a1 = fractions.Fraction(a) print a1 #!/usr/bin/python # -*- coding: utf-8 -*- import fractions **** import Tkinter class simpleapp_tk(Tkinter.Tk): def __init__(self,parent): Tkinter.Tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): self.grid() self.entryVariable1 = Tkinter.StringVar() self.entry1 = Tkinter.Entry(self, textvariable=self.entryVariable1) self.entry1.grid(column=0, row=0, sticky='EW') self.entry1.bind("<Return>", self.OnPressEnter) self.entryVariable1.set(u"Enter text here.") self.entryVariable2 = Tkinter.StringVar() self.entry = Tkinter.Entry(self, textvariable=self.entryVariable2) self.entry.grid(column=1, row=0, sticky='EW') self.entry.bind("<Return>", self.OnPressEnter) self.entryVariable2.set(u"Enter text here.") a1 = fractions.Fraction(entryVariable1) **** b1 = fractions.Fraction(entryVariable2) **** button = Tkinter.Button(self, text=u"Click me !", command=self.OnButtonClick) button.grid(column=5, row=0) self.labelVariable = Tkinter.StringVar() label = Tkinter.Label(self, textvariable=self.labelVariable, anchor="w", fg="white", bg="blue") label.grid(column=0, row=2, columnspan=2, sticky='EW') self.labelVariable.set(u"Hello !") self.grid_columnconfigure(0, weight=1) self.resizable(True, False) self.update() self.geometry(self.geometry()) self.entry1.focus_set() self.entry1.selection_range(0, Tkinter.END) def OnButtonClick(self): #self.labelVariable.set(self.entryVariable1.get()+self.entryVariable2.get()+" (You clicked the button !") self.labelVariable.set(a1) **** self.entry1.focus_set() self.entry1.selection_range(0, Tkinter.END) def OnPressEnter(self, event): #self.labelVariable.set(self.entryVariable1.get()+self.entryVariable2.get()+" (You pressed enter !") self.labelVariable.set(b1) **** self.entry1.focus_set() self.entry1.selection_range(0, Tkinter.END) if __name__ == "__main__": app = simpleapp_tk(None) app.title('matriseGUI') app.mainloop() Lenke til kommentar
snippsat Skrevet 6. august 2010 Del Skrevet 6. august 2010 Ja ryddet opp litt,bruk 4 space indent. Det er det nesten alle bruker,er en standar for python les pep-8. Nå er det bedere og lage dette fra bånn enn og prøve og plassere noe kode inn i et tutorial som er for noe annet. Kan skrive en wxpython versjon. import Tkinter import fractions class simpleapp_tk(Tkinter.Tk): def __init__(self,parent): Tkinter.Tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): self.grid() self.entryVariable1 = Tkinter.StringVar() #--- self.entry1 = Tkinter.Entry(self, textvariable=self.entryVariable1) self.entry1.grid(column=0, row=0, sticky='EW') button = Tkinter.Button(self, text=u"Click me !", command=self.OnButtonclick) button.grid(column=2, row=0) self.labelVariable = Tkinter.StringVar() label = Tkinter.Label(self, textvariable=self.labelVariable, anchor="w", fg="white", bg="blue") label.grid(column=0, row=2, columnspan=2, sticky='EW') self.labelVariable.set(u"") self.grid_columnconfigure(0, weight=1) self.resizable(True, False) self.update() self.geometry(self.geometry()) self.entry1.focus_set() self.entry1.selection_range(0, Tkinter.END) def OnButtonclick(self): #-- try: x = self.entry1.get() a1 = fractions.Fraction(x) self.labelVariable.set(a1) except ValueError: self.labelVariable.set('Numeric values only') self.entry1.focus_set() self.entry1.selection_range(0, Tkinter.END) if __name__ == "__main__": app = simpleapp_tk(None) app.title('my application') app.mainloop() Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå