Hi DrW3sk3r
Hier noch eine weitere Variante mit 'after()' in einer Klasse:
Code: Alles auswählen
#!/usr/bin/env python
#coding: utf-8
from functools import partial
try:
#~~ For Python 2.x
import Tkinter as tk
except ImportError:
#~~ For Python 3.x
import tkinter as tk
TIME_INTERVAL = 100 # 100ms
MAX_COUNT = 10000
FONT_READOUT = ("Helvetica", 20, "bold")
BG_READOUT = 'khaki1'
FG_READOUT = 'blue'
class MyCounter(tk.Frame):
def __init__(self, parent_widget, interval=TIME_INTERVAL,
max_count=MAX_COUNT, **options):
self.interval = interval
self.max_count = max_count
self.counter = 0
self.run = False
tk.Frame.__init__(self, parent_widget, **options)
self.build_counter_readout()
self.build_command_buttons()
self.cycler()
def build_command_buttons(self):
button_frame = tk.Frame(self, bg=BG_READOUT)
button_frame.pack(fill='x', ipadx=2, ipady=2)
button_names = ["Start", "Stop", "Reset"]
for button_name in button_names:
button = tk.Button(button_frame, text=button_name)
button.pack(side='left', expand=True)
button.bind('<Button-1>', partial(
self.command_button_callback, button_name))
def build_counter_readout(self):
self.readout_var = tk.IntVar()
tk.Label(self, textvariable=self.readout_var, font=FONT_READOUT,
bg=BG_READOUT, fg=FG_READOUT, width=12).pack(fill='x')
def command_button_callback(self, button_name, args):
if button_name == "Start" and not self.run:
self.run = True
if button_name == "Stop":
self.run = False
if button_name == "Reset":
self.counter = 0
self.readout_var.set(self.counter)
def cycler(self):
if self.run and self.counter < self.max_count:
self.counter += 1
self.readout_var.set(self.counter)
self.after(self.interval, self.cycler)
def main():
root = tk.Tk()
MyCounter(root, 1, relief='raised', bd=1).pack(padx=2, pady=(2, 0))
MyCounter(root, relief='raised', bd=1).pack(padx=2, pady=(2, 0))
MyCounter(root, 500, 100, relief='raised', bd=1).pack(padx=2, pady=(2, 0))
root.mainloop()
if __name__ == '__main__':
main()
Gruss wuf
