BlackJack hat geschrieben:@Alfons Mittelmeyer: Äh, natürlich geht das nicht, das entspricht nicht der Python-Syntax. Das geht aber auch mit Chinesisch nicht, denn auch mit chinesischen Zeichen wird man etwas schreiben können was nicht der Python-Syntax entspricht.
Die Namen sind Strings. Gibt es eine besondere String Syntax in Python? Habe ich nichts davon gehört.
BlackJack hat geschrieben:Zumal die Namen Pfadnamen für den Tk-Interpreter sind und ich bin mir gerade nicht so sicher ob Deine den Syntaxregeln dort entsprechen und damit dann auf Tk-Seite Probleme entstehen können. Auch sollte man vorher abklären ob man auf diese Weise nicht Namenskollisionen mit Tk/Tcl-Namen bekommen kann und damit dann nicht etwas überschreibt/verdeckt wenn man Pech hat.
Die Namen müssen mit einem Kleinbuchstaben beginnen aber eine Raute geht auch.
Und ein Punkt hat eine besondere Bedeutung, ähnlich wie '/' bei einem Directory oder '.' bei Python Objekten:
Code: Alles auswählen
# -*- coding: utf-8 -*-
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
def that(self,name):
return self.nametowidget(name)
class Application(tk.Tk):
def __init__(self,**kwargs):
tk.Tk.__init__(self,**kwargs)
self.minsize(170, 250)
# widget definitions ===================================
tk.Entry(self,name = 'input a')
tk.Entry(self,name = 'input b')
tk.Button(self,text='a * b',name = 'a * b')
tk.Label(self, name = 'ergebnis von a * b')
Ein_Labelframe(self,name = 'ein LabelFrame')
that(self,'input a').pack()
that(self,'input b').pack()
that(self,'a * b').pack(fill='x')
that(self,'ergebnis von a * b').pack(fill='x')
that(self,'ein LabelFrame').pack()
# besondere Bedeutung eines Punktes
that(self,'ein LabelFrame.ein Button im LabelFrame')['bg'] = 'yellow'
class Ein_Labelframe(tk.LabelFrame):
def __init__(self,master,**kwargs):
tk.LabelFrame.__init__(self,master,**kwargs)
self.config(text='ein LabelFrame')
# widget definitions ===================================
py_referenz = tk.Button(self,text='ein Button im LabelFrame',name = 'ein Button im LabelFrame')
# Mit Namen, kann man das Widget schön geprintet sehen
print(py_referenz)
that(self,'ein Button im LabelFrame').pack()
# besondere Bedeutung eines Punktes
that(self,'.a * b')['bg'] = 'lightgreen'
if __name__ == '__main__':
Application().mainloop()
Also, wer auf die Root zugreifen will, das kann man immer tun mit '.'