2016-05-22 16 views
0

私はpythonとtkinterには新しく、私はストップウォッチを作ることに決めました。 多くの有用な情報を見つけ出しましたが、tkinterに関数の値を表示する方法がまだ見つかりませんでした。ここに私の現在のコードは次のとおりです。tkinterの関数の値を表示するには

import time 
from tkinter import* 
import os 

root = Tk() 

def clock(event): 
    second = 0 
    minute = 0 
    hour = 0 
    while True: 
     time.sleep(0.99) 
     second +=1 
     print(hour,":",minute,":",second) 
    return 

def stop(event): 
    time.sleep(1500) 

def clear(event): 
    os.system('cls') 


button1 = Button(root, text="Start") 
button2 = Button(root, text="Stop") 
button3 = Button(root, text="Clear") 

button1.bind("<Button-1>", clock) 
button2.bind("<Button-1>", stop) 
button3.bind("<Button-1>", clear) 

button1.grid(row=2, column=0, columnspan=2) 
button2.grid(row=2, column=2, columnspan=2) 
button3.grid(row=2, column=4, columnspan=2) 


root.mainloop() 

私はコードは(特に機能が停止し、クリア)まだperefectされていないことを認識しています。

答えて

0

あなたは、コールバックが 何かが起きたときのTkによって呼び出されるPythonコードで、Tkinterでは

(何かが起こるとき、例えばボタンをクリックしたときに?あなたの関数を呼び出す)コールバック関数を使用して検討するかもしれません。たとえば、ボタンウィジェットは、ユーザがボタンをクリックしたときに呼び出されるコマンド コールバックを提供します。また、イベントバインディングで コールバックを使用します。

コール可能な任意のPythonオブジェクトをコールバックとして使用できます。これには、 の通常の関数、バインドされたメソッド、ラムダ式、および呼び出し可能な オブジェクトが含まれます。このドキュメントでは、これらの代替案のそれぞれについて簡単に説明します。 例: 関数オブジェクトをコールバックとして使用するには、関数オブジェクトをTkinterに直接渡します。 Tkinterのインポート*から

def callback(): 
    print "clicked!" 

b = Button(text="click me", command=callback) 
b.pack() 

mainloop() 

http://effbot.org/zone/tkinter-callbacks.htm

0

それは、関数の値を表示するかを、あなたのサンプルコードから不明です。

tkinterのようなものを達成する良い方法は、そのStringVar control classのインスタンスを作成し、それを別のウィジェットのtextvariableオプションとして指定することです。これが完了すると、StringVarインスタンスの値を変更すると、関連付けられたウィジェットのテキストが自動的に更新されます。

以下のコードはこれを示す:

import os 
import time 
import tkinter as tk 

class TimerApp(tk.Frame): 
    def __init__(self, master=None): 
     tk.Frame.__init__(self, master=None) 
     self.grid() 
     self.create_widgets() 
     self.elapsed = 0 
     self.refresh_timer() 
     self.after_id = None # used to determine and control if timer is running 

    def create_widgets(self): 
     self.timer = tk.StringVar() 
     self.timer.set('') 
     self.timer_label = tk.Label(self, textvariable=self.timer) 
     self.timer_label.grid(row=1, column=2) 

     self.button1 = tk.Button(self, text="Start", command=self.start_clock) 
     self.button1.grid(row=2, column=0, columnspan=2) 
     self.button2 = tk.Button(self, text="Stop", command=self.stop_clock) 
     self.button2.grid(row=2, column=2, columnspan=2) 
     self.button3 = tk.Button(self, text="Clear", command=self.clear_clock) 
     self.button3.grid(row=2, column=4, columnspan=2) 

    def start_clock(self): 
     self.start_time = time.time() 
     self.after_id = self.after(1000, self.update_clock) 

    def stop_clock(self): 
     if self.after_id: 
      self.after_cancel(self.after_id) 
      self.after_id = None 

    def clear_clock(self): 
     was_running = True if self.after_id else False 
     self.stop_clock() 
     self.elapsed = 0 
     self.refresh_timer() 
     if was_running: 
      self.start_clock() 

    def update_clock(self): 
     if self.after_id: 
      now = time.time() 
      delta_time = round(now - self.start_time) 
      self.start_time = now 
      self.elapsed += delta_time 
      self.refresh_timer() 
      self.after_id = self.after(1000, self.update_clock) # keep updating 

    def refresh_timer(self): 
     hours, remainder = divmod(self.elapsed, 3600) 
     minutes, seconds = divmod(remainder, 60) 
     self.timer.set('{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)) 

app = TimerApp() 
app.master.title('Timer') 
app.mainloop() 
関連する問題