Seite 1 von 1
variabele lesen von childwindow
Verfasst: Mittwoch 28. März 2012, 14:39
von ercmrj
Ich hab ein mainwindow und ein childwindow und brauche ein Wort im mainwindow was ich eingegeben hab in ein Entry in mein childwindow.
Mit print kan ich sehen das ich die variabele auslesen kan im childwindow aber wie kan ich die auslesen im mainwindow
mainwindow:
Code: Alles auswählen
from Tkinter import *
import test4
def button_click():
d=test4.MyDialog()
value = d.get_value()
print "value back=",value
root = Tk()
b=Button(root, text="Hello!",command=button_click)
b.pack()
root.mainloop()
childwindow:
Code: Alles auswählen
from Tkinter import *
class MyDialog:
def __init__(self):
top = self.top = Toplevel()
Label(top, text="Value").pack()
self.e = Entry(top)
self.e.pack(padx=5)
b = Button(top, text="OK_quit", command=self.ok)
b.pack(pady=5)
def ok(self):
print "value is", self.e.get()
self.top.destroy()
def get_value(self):
nn = self.e.get()
print "value",nn
return nn
Re: variabele lesen von childwindow
Verfasst: Mittwoch 28. März 2012, 14:48
von BlackJack
@ercmrj: Du könntest den Wert in der `ok()`-Methode an das Fensterobjekt binden und aus dem Dialog ein modales Fenster machen. Für Dialoge würde es sich auch anbieten das Rahmenwerk, das im `tkSimpleDialog`-Modul zur Verfügung steht, zu verwenden, anstatt das Rad komplett neu zu erfinden.
Re: variabele lesen von childwindow
Verfasst: Mittwoch 28. März 2012, 15:33
von ercmrj
BlackJack hat geschrieben:Du könntest den Wert in der `ok()`-Methode an das Fensterobjekt binden und aus dem Dialog ein modales Fenster machen. Für Dialoge würde es sich auch anbieten das Rahmenwerk
Können sie bitte vieleicht auch ein Beispiel geben, so begreif ich es nicht ganz.
Re: variabele lesen von childwindow
Verfasst: Mittwoch 28. März 2012, 16:19
von wuf
Hi ercmrj
Meist du etwas in diese Richtung. Der Dialog soll etwas zurückgeben, wenn er mittels 'OK_quit' geschlossen wird:
Code: Alles auswählen
import Tkinter as tk
class MyDialog(tk.Toplevel):
def __init__(self, callback=None):
self.callback = callback
tk.Toplevel.__init__(self)
tk.Label(self, text="Value").pack()
self.e = tk.Entry(self)
self.e.pack(padx=5)
tk.Button(self, text="OK_quit", command=self.ok).pack(pady=5)
def ok(self):
value = self.e.get()
print "value is", value
if self.callback:
self.callback(value)
self.destroy()
Hauptskript:
Code: Alles auswählen
import Tkinter as tk
import test4
def my_dialog_callback(value):
print "value back=", value
def button_click():
test4.MyDialog(my_dialog_callback)
root = tk.Tk()
but_hello = tk.Button(root, text="Hello!", command=button_click)
but_hello.pack()
root.mainloop()
Gruß wuf

Re: variabele lesen von childwindow
Verfasst: Mittwoch 28. März 2012, 16:49
von ercmrj
Vielen Dank Wuf, das ist genau was ich suchte, jetzt kan ich wieder weiter.
Ich habe auch schön etwas gefunden über tksimpleDialog, mal sehen ob es mir damit auch gelingt.
Re: variabele lesen von childwindow
Verfasst: Montag 9. April 2012, 07:48
von ercmrj
Der moderator hat mein vorigem thread gespert und mich gezwugen weiter zu suchen.
Ich wollte jetzt ein variabele aus dem Haubtvenster gebrauchen im Nebenvenster.
Nach vielem Sachen probiert zu haben kom ich auf diesem Program.
Mir sieht es nicht logisch aus aber meine Frage ist, ist es richtig?
Man kan mit Python kein variabele ubertragen zum Nebenvenster nur functionen?
Code: Alles auswählen
from Tkinter import *
import test4
def callback():
ss = "new value"
return ss
def button_click():
d=test4.MyDialog(callback)
root = Tk()
b=Button(root, text="Hello!",command=button_click)
b.pack()
root.mainloop()
Code: Alles auswählen
from Tkinter import *
class MyDialog:
def __init__(self,callback):
top = self.top = Toplevel()
l=Label(top)
l.pack()
ss = callback() # hier ist die variabele von Haubtvenster
l.config(text=ss)
b = Button(top, text="OK_quit", command=self.button_click)
b.pack()
def button_click(self):
self.top.destroy()
Re: variabele lesen von childwindow
Verfasst: Montag 9. April 2012, 09:03
von deets
Natuerlich kann man Variablen uebertragen - niemand zwingt dich, ein callable zu benutzen. Was passiert denn, wenn du MyDialog(callback) ersetzt mit MyDialog("new value"), hm? Kleiner Hinweis: zuerst wirst du einen Fehler kriegen, dann musst du MyDialog noch etwas anpassen.
Aber ganz ehrlich: du laesst hier jede Menge Grundlagen vermissen. Ein Tutorial ueber objektorientierte Programmierung in Python waere mal dringend angeraten!
Re: variabele lesen von childwindow
Verfasst: Montag 9. April 2012, 10:34
von ercmrj
Ich habe es bereits gefunden, es ist sehr einfach natürlich.
Ich habe es vorher auch so probiert aber damals ist es mir nicht gelungen, vielleicht war ich die variabele self vergessen.
Danke für die Hilfe
Code: Alles auswählen
from Tkinter import *
import test4
def button_click():
ss = "new value"
d=test4.MyDialog(ss)
root = Tk()
b=Button(root, text="Hello!",command=button_click)
b.pack()
root.mainloop()
Code: Alles auswählen
from Tkinter import *
class MyDialog:
def __init__(self,ss):
top = self.top = Toplevel()
l=Label(top)
l.pack()
l.config(text=ss)
b = Button(top, text="OK_quit", command=self.button_click)
b.pack()
def button_click(self):
self.top.destroy()