variabele lesen von childwindow

Fragen zu Tkinter.
Antworten
ercmrj
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2011, 07:38

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
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.
ercmrj
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2011, 07:38

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.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 :wink:
Take it easy Mates!
ercmrj
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2011, 07:38

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.
ercmrj
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2011, 07:38

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()
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!
ercmrj
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2011, 07:38

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()
Antworten