Von Aussen auf ein Tkinter Fenster zugreifen

Fragen zu Tkinter.
Antworten
Theo
User
Beiträge: 17
Registriert: Montag 24. August 2009, 16:11
Kontaktdaten:

Hallo,

ich hätte eine Frage, wie kann ich von aussen auf ein Fenster zu greifen. Hier erstmal mein Code

Code: Alles auswählen

from vcScript import *
from Tkinter import *

def OnRun():
  global x
  print x

def test_klick(prop):
  global x 
  x = Stat_wind().run()
  
class Stat_wind(object):
  def __init__(self):
    self.main_window = Tk()
    self.canvas = Canvas(self.main_window)
    self.canvas.pack()
    self.canvas.create_line(10,250,10,10, arrow=LAST)
    self.canvas.create_line(10,250,350,250, arrow=LAST)
    return self.main_window
  
  def run(self):
    self.main_window.mainloop()
  
  def paint(self, x1, y1, x2, y2):
    self.canvas.create_line(x1,y1,x2,y2)

comp = getComponent()

test = comp.getProperty("Test")

test.OnChanged = test_klick
Ok, also das soll sowas wie ne Statistik werden. Das Fenster wird problemlos erzeugt, nun aber das Problem, wie kann ich von der OnRun Funktion auf mein erzeugtes Fenster zugreifen? Scheinbar klappt das mit den global nicht so ganz, da ich nur None als Zeiger bekomme. Ich wuerde gern von der OnRun die paint Methode aufrufen, so dass die Linien in das Fenster gezeichnet werden koennen.

Vielen Dank schonmal im Vorraus
Theo

Edit (Leonidas): Code-Hightlighting eingeschaltet.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Zu Global, PEP8, dem ganzen Aufbau des Programms etc. äußere ich mich mal nicht. Dies sollte zumindest Dein beschriebenes Problem lösen:

Code: Alles auswählen

def test_klick(prop):
    global x 
    x = Stat_wind()
    x.run()
MfG
HWK
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Theo

Willkommen in unserem Forum. Ich weiss anhand deines Skriptes nicht so genau was du möchtest. Habe hier einmal etwas zum herumspielen erstellt:

Code: Alles auswählen

#from vcScript import *
import Tkinter as tk

class MyGraphPlane(tk.Canvas):

    def __init__(self, parent):

        self.parent = parent
        #~~ Initialisiere die geerbte Tk.Canvas-Klasse
        tk.Canvas.__init__(self, parent)
        self.pack()

        #~~ Erzeuge die Koordinaten-Zeiger
        self.create_line(10, 250, 10, 10, arrow='last', tags='yaxis')
        self.create_line(10, 250, 350, 250, arrow='last', tags='xaxis')

    def draw_line(self, coords, **options):
        """Zeichne eine Linie"""

        self.create_line(coords, options)

def update_line():

    x0, y0, x1, y0 = my_graph_plane.coords('line')

    if x1 <= 340:
        x1 += 10
        my_graph_plane.coords('line', x0, y0, x1, y0)

    app_win.after(200, update_line)

#~~ Erzeuge das Hauptfenster
app_win = tk.Tk()
app_win.geometry('400x270')

#~~ Erzeuge die Grafikflaeche
my_graph_plane = MyGraphPlane(app_win)

#~~ Erzeuge eine neue Linie
my_graph_plane.draw_line((10, 100, 100, 100), tags='line',
    fill='red', arrow='last')

#~~ Aendere Linie zyklisch
update_line()

app_win.mainloop()
Viel Spass beim programmieren mit Python & Tkinter

Gruss wuf :wink:
Take it easy Mates!
Antworten