Hallo,
du schreibst:
self.text_01 = tk.Frame(master)
1)
benutzt du hierbei import Tkinter as tk ?
2)
woher weiss bei dieser Anweisung self.text_01 dass es ein textwidget ist?
3)
wo kommt diese Anweisung in die init function?
ich hoffe die Fragen sind nicht zu bloed.
thanks
Anfängerfragen
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ad 1) Ja.
Ad 2) Das weiss das Objekt, nicht der Name (und schon gar nicht die Anweisung).
Ad 2) Das weiss das Objekt, nicht der Name (und schon gar nicht die Anweisung).
Code: Alles auswählen
#!/usr/bin/env python
import Tkinter as tk
class MyApplication(object):
def strip_file(self, *args):
self.text_00.insert(END,"test text")
def __init__(self, master):
frame_01 = tk.Frame(master)
self.text_01 = tk.Text(frame_01)
text_01.pack()
frame_01.pack()
frame_02 = tk.Frame(master)
button_01 = tk.Button(frame_02,command = self.strip_file)
button_00.pack()
frame_02.pack()
if __name__ == "__main__":
root = tk.Tk()
display = MyApplication(root)
root.mainloop()
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hallo cofi,
vielen Dank fuer deine Code, mit ein paar kleinen Aenderungen hat es
funktioniert, (vor beiden widgets, text und button jeweils ein self),
fuer mich hab ich das erst mal so abgespeichert, dass ich mit der
Definition:
self.text_01 = tk.Text(frame_01)
erst eine Methode definiere, und nur so kann ich ausserhalb auf
diese Methode zugreifen. Ist das so richtig formuliert?
Das mit dem tk gefaellt mir besser, ist irgendwie ordentlicher.
Ob man von object vererbt oder nicht, scheint hier nicht die Rolle
zu spielen, ist das syntaktisch richtiger oder warum macht man das?
class MyApp(object): vs. class MyApp():
Thanx!
vielen Dank fuer deine Code, mit ein paar kleinen Aenderungen hat es
funktioniert, (vor beiden widgets, text und button jeweils ein self),
fuer mich hab ich das erst mal so abgespeichert, dass ich mit der
Definition:
self.text_01 = tk.Text(frame_01)
erst eine Methode definiere, und nur so kann ich ausserhalb auf
diese Methode zugreifen. Ist das so richtig formuliert?
Das mit dem tk gefaellt mir besser, ist irgendwie ordentlicher.
Ob man von object vererbt oder nicht, scheint hier nicht die Rolle
zu spielen, ist das syntaktisch richtiger oder warum macht man das?
class MyApp(object): vs. class MyApp():
Thanx!
Hallo,
jetzt hab ich quasi ganz diszipliniert die neuen Richtlinien in meinen
original Code uebernommen, aber bekomme nun bei mehreren
Widgets Probleme in der Definition.
einige Beispiele waeren:
relief = RIDGE bei der frame definition
orient = VERTICAL bei einer scrollbar definition
selectmode = SINGLE bei einer listbox definition
das war davor alles kein Problem. Komischerweise vertraegt er
zum Beispiel die Eigenschaften: background, width und heigth
beim frame.
Weiterhin versteht er zum Beispiel das keyword: END nicht mehr,
welches ich bei:
self.text_01.insert(END,text_list)
verwende, jedoch "0.0" anstatt "END" funktioniert.
Nun bin ich etwas durcheinander, und es scheint mit dem import
zu tun haben:
import Tkinter as tk
Wie kann man das erklaeren und wie muss ich da reagieren,
dass er die keywords wieder erkennt?
Hier mal ein abgespecktes Beispiel, wo er stirbt bei:
frame_01 = tk.Frame(master, relief=RIDGE)
und wenn man das korrigiert stirbt er bei:
self.text_01.insert(END,text_list)
jetzt hab ich quasi ganz diszipliniert die neuen Richtlinien in meinen
original Code uebernommen, aber bekomme nun bei mehreren
Widgets Probleme in der Definition.
einige Beispiele waeren:
relief = RIDGE bei der frame definition
orient = VERTICAL bei einer scrollbar definition
selectmode = SINGLE bei einer listbox definition
das war davor alles kein Problem. Komischerweise vertraegt er
zum Beispiel die Eigenschaften: background, width und heigth
beim frame.
Weiterhin versteht er zum Beispiel das keyword: END nicht mehr,
welches ich bei:
self.text_01.insert(END,text_list)
verwende, jedoch "0.0" anstatt "END" funktioniert.
Nun bin ich etwas durcheinander, und es scheint mit dem import
zu tun haben:
import Tkinter as tk
Wie kann man das erklaeren und wie muss ich da reagieren,
dass er die keywords wieder erkennt?
Hier mal ein abgespecktes Beispiel, wo er stirbt bei:
frame_01 = tk.Frame(master, relief=RIDGE)
und wenn man das korrigiert stirbt er bei:
self.text_01.insert(END,text_list)
Code: Alles auswählen
#!/usr/bin/env python
import Tkinter as tk
class MyApplication(object):
def strip_file(self):
text_list=[]
text_list.append("line_01 \n")
self.text_01.insert(END,text_list)
def __init__(self, master):
frame_01 = tk.Frame(master, relief=RIDGE)
self.text_01 = tk.Text(frame_01)
self.text_01.pack()
frame_01.pack()
frame_02 = tk.Frame(master)
self.button_01 = tk.Button(frame_02,command = self.strip_file)
self.button_01.pack()
frame_02.pack()
if __name__ == "__main__":
root = tk.Tk()
display = MyApplication(root)
root.mainloop()
@ts7343: Methoden werden innerhalb einer Klasse mit ``def`` definiert. Mit ``self.irgedwas = wert`` wird ein Attribut zugewiesen und gewissermassen definiert wenn es die erste Zuweisung an dieses Attribut ist.
Wenn Du nicht mehr all Namen aus dem `Tkinter`-Modul in den Namensraum des aktuellen Moduls holst, dann sind `END` & Co so natürlich nicht mehr bekannt, denn diese Namen sind ja aus dem `Tkinter`-Modul. Und über dieses, was in Deinem Modul an den Namen `tk` gebunden ist, musst Du diese Konstanten jetzt auch ansprechen. Genau wie die anderen Objekte wie zum Beispiel `Frame`.
Objekte die nicht in anderen Methoden benötigt werden, sollte man auch nicht an das Objekt binden. Das beträfe in Deinem Beispiel den Button. Und das durchnummerieren von Namen solltest Du Dir gar nicht erst angewöhnen. Namen sollten dem Leser eine Idee davon vermitteln was die Objekte, die dahinter stehen *bedeuten*. Unter `button_01` oder `text_01` kann man sich nicht viel vorstellen.
In der überwiegenden Zahl der Quelltexte die man so findet stehen die "magischen" Methoden, also die mit doppelten führenden Unterstrichen übrigens am Anfang einer Klasse.
Wenn Du nicht mehr all Namen aus dem `Tkinter`-Modul in den Namensraum des aktuellen Moduls holst, dann sind `END` & Co so natürlich nicht mehr bekannt, denn diese Namen sind ja aus dem `Tkinter`-Modul. Und über dieses, was in Deinem Modul an den Namen `tk` gebunden ist, musst Du diese Konstanten jetzt auch ansprechen. Genau wie die anderen Objekte wie zum Beispiel `Frame`.
Objekte die nicht in anderen Methoden benötigt werden, sollte man auch nicht an das Objekt binden. Das beträfe in Deinem Beispiel den Button. Und das durchnummerieren von Namen solltest Du Dir gar nicht erst angewöhnen. Namen sollten dem Leser eine Idee davon vermitteln was die Objekte, die dahinter stehen *bedeuten*. Unter `button_01` oder `text_01` kann man sich nicht viel vorstellen.
In der überwiegenden Zahl der Quelltexte die man so findet stehen die "magischen" Methoden, also die mit doppelten führenden Unterstrichen übrigens am Anfang einer Klasse.
- DeKugelschieber
- User
- Beiträge: 82
- Registriert: Sonntag 28. Februar 2010, 12:23
- Kontaktdaten:
Schön das mein Thread noch eine Verwendung findet
MfG DeKugelschieber
Hallo BlackJack,
hast du fuer mich noch ein command, wie ich herausfinde, welche
Namen mir alle verloren gehen, wenn ich schreibe:
import Tkinter as tk
anstatt von:
from Tkinter import *
gab es da nicht etwas mit dir() ?
thanks
lp
hast du fuer mich noch ein command, wie ich herausfinde, welche
Namen mir alle verloren gehen, wenn ich schreibe:
import Tkinter as tk
anstatt von:
from Tkinter import *
gab es da nicht etwas mit dir() ?
thanks
lp
@ts7343: Wenn das Dein einziger *-Import war, dann schau doch einfach welche Namen etwas mit der GUI zu tun haben. Wo sollten die schon herkommen als aus dem `Tkinter`-Modul. Du solltest eigentlich bei eigenem Quelltext wissen wo Deine Namen herkommen.
Hallo BlackJack,
aber mir geht doch zum Beispiel das Keyword RIDGE verloren,
obwohl es auch etwas mit Tkinter zu tun hat,
er nimmt ja dann z.b. nicht mehr:
frame_01 = tk.Frame(master, relief=RIDGE)
somit gehen mir gewisse Namen mit:
import Tkinter as tk
verloren, und welche Namen haette ich gerne gewusst, denn
meiner Meinung nach haben Namen wir RIDGE (oder END fuer text.insert)
auch etwas mit Tkinter zu tun?
thanx
aber mir geht doch zum Beispiel das Keyword RIDGE verloren,
obwohl es auch etwas mit Tkinter zu tun hat,
er nimmt ja dann z.b. nicht mehr:
frame_01 = tk.Frame(master, relief=RIDGE)
somit gehen mir gewisse Namen mit:
import Tkinter as tk
verloren, und welche Namen haette ich gerne gewusst, denn
meiner Meinung nach haben Namen wir RIDGE (oder END fuer text.insert)
auch etwas mit Tkinter zu tun?
thanx
Es geht nichts "verloren":ts7343 hat geschrieben:aber mir geht doch zum Beispiel das Keyword RIDGE verloren,
Code: Alles auswählen
frame_01 = tk.Frame(master, relief=tk.RIDGE)
Code: Alles auswählen
frame_01 = tk.Frame(master, relief="ridge")
@ts7343: `RIDGE` ist übrigens kein Schlüsselwort sondern einfach ein Name wie jeder andere. Der hat keine besondere Bedeutung für Python. Als Schlüsselwörter bezeichnet man die Worte die zur Syntax einer Programmiersprache gehören.
Code: Alles auswählen
In [454]: import keyword
In [455]: keyword.iskeyword('RIDGE')
Out[455]: False
In [456]: keyword.iskeyword('for')
Out[456]: True
In [457]: keyword.iskeyword('import')
Out[457]: True
In [458]: keyword.kwlist
Out[458]:
['and',
'as',
'assert',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'exec',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'not',
'or',
'pass',
'print',
'raise',
'return',
'try',
'while',
'with',
'yield']
Zuletzt geändert von BlackJack am Montag 10. Mai 2010, 07:23, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Tags gesetzt.
Grund: Quelltext in Python-Tags gesetzt.