Einbinden von Klassen

Fragen zu Tkinter.
Antworten
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

hallo,

ich bin auf ein Problem gestoßen, dass ich mir mit meinen Wissen nicht lösen kann.

Code: Alles auswählen

import Tkinter as tk
from functools import partial


class Test:

    def __init__(self, frame):

        self.presses = 0
        
        for i in range(6):
            button = tk.Button(frame, text='   ')
            button.grid(row=1, column=i, padx=2, pady=10)
            tk.Widget.bind(button, '<1>', self.press)


    def press(self, event):
        self.presses += 1
        



def print_presses():
    print test.presses,
    win.after(1000, print_presses)

win = tk.Tk()

test = Test(win)

win.after(1000, print_presses)

win.mainloop()
        

Wie kann ich dieses "after" umgehen?

Wie kann ich es machen, dass eine Prozedur genau dann aufgerufen wird, wenn test.presses gleich 5 ist?
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Ich hoffe, ich vermute das Richtige:

Code: Alles auswählen

import Tkinter as tk


class Gui(object):

  def __init__(self, the_num=5, n=6):

    self.root = tk.Tk()
    self.presses = 0
    self.the_num = the_num
    self.buttons = [tk.Button(self.root, text='%s' % i,
                              command=self.check_presses) for i in xrange(n)]

    for i, but in enumerate(self.buttons):
      but.grid(row=0, column=i, padx=10, pady=10)
  
    self.svar= tk.StringVar()
    self.label = tk.Label(self.root, textvariable=self.svar)
    self.label.grid(row=1, column=0, columnspan=n)

    
  def check_presses(self):
    
    self.presses += 1
    if self.presses == self.the_num:
      self.show_message()


  def show_message(self):

    self.svar.set('Presses: %s' % self.presses)


  def run(self):

    self.root.mainloop()

####

if __name__ == '__main__':

  Gui().run()
Meinst Du so etwas?

:wink:
yipyip
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

yipyip hat geschrieben: Meinst Du so etwas?
Kann sein...

Geht es auch, dass man die Prozedur show_message außerhalb der Klasse aufruft?

Ich glaube allerdings, dass ich das ganze einbauen kann...
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

So?

Code: Alles auswählen

import Tkinter as tk

class Gui(object):

  def __init__(self, show_func, the_num=5, n=6):

    self.root = tk.Tk()
    self.presses = 0
    self.the_num = the_num
    self.buttons = [tk.Button(self.root, text='%s' % i,
                              command=lambda : self.check_presses(show_func))
                    for i in xrange(n)]

    for i, but in enumerate(self.buttons):
      but.grid(row=0, column=i, padx=10, pady=10)

     
  def check_presses(self, show_func):
    
    self.presses += 1
    if self.presses == self.the_num:
      show_func(self.presses)


  def run(self):

    self.root.mainloop()

####
    
def show_message(presses):

   print 'Presses: %s' % presses

####

if __name__ == '__main__':

  Gui(show_message).run()       
Ansonsten waere es hilfreich, genau zu erklaeren, was Du eigentlich vorhast.

:wink:
yipyip
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Das dürfte es gewesen sein. Danke :D

Eine letzte Frage hätt ich dann allerdings doch noch.
Welche Aufgabe hat "object" in den Klammer der Klasse?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Pascal hat geschrieben:Welche Aufgabe hat "object" in den Klammer der Klasse?
Man erbt von ``object`` damit die Klasse eine New-Style-Klasse wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten