2016-11-26 11 views
-1

これは私の最初のpythonプログラムです。私はtorricelliのdraintime電卓を作成しようとしていますが、 'clear result'ボタンは機能しません。計算結果をクリアしたい。Python Tkinter GUI:「結果をクリア」ボタンが機能しない

私はこのエラーを取得する:

Traceback (most recent call last): 
    File "C:\Users\David \Desktop File\GUI_DrainTime_Calculator.py", line 83, in clear 
    drain_label.destroy() 
NameError: name 'drain_label' is not defined 

このNameErrorが解消されない理由を私は理解助けてください。 これが犯人である:

drain_label = Label(
    WIN, 
    font=('Helvetica', 8, 'bold'), 
    text="The time it takes for the liquid to drain is: %.0f hour, %.0f minutes, and %.0f seconds." % (hr, Min, sec)).pack(side=BOTTOM) 

def clear(): 
    drain_label.destroy() 
    Clearbtn = Button(WIN, text="Clear Results", font('Helvetica',7,'bold'), fg='black',command=clear) 
    Clearbtn.configure(background='grey') 
    Clearbtn.pack(side=TOP,pady=5) 

はあなたのすべてをありがとう!私は可能な限り、グローバル変数を使用しないよう助言するものの

答えて

0

あなたの変数drain_labelは、それゆえ機能は、どこにでもその定義/宣言を参照してくださいあなたの関数に引数としてdrain_labelを渡してみたりglobal作ることができない、globalではありません。

2

あなたのラベルにtextvariableをお試しください。また、あなたのプログラムにクラスを使用することをお勧めします。

import tkinter as tk 
from tkinter import ttk 

class Calculator: 
    def __init__(self, master): 

     frame = tk.Frame(master) 

     self.text_var = tk.StringVar() 
     hr, min, sec = 1, 4, 20 
     text = 'drain time = %.0f Hr, %0f Min, %.0f Sec' % (hr, min, sec) 

     drain_label = ttk.Label(frame, textvariable=self.text_var).pack() 

     clear_button = ttk.Button(frame, text='clear', command=self.destroy).pack() 

     frame.pack() 

    def destroy(self): 
     self.text_var.set('') 

root = tk.Tk() 
app = Calculator(root) 
root.mainloop() 

あなたは文字列変数を取得および設定する.get().set()方法と共にtk.StringVar()を使用することができます。 hr, min, secに文字列変数を使用し、ボタンを使用してそれらを渡すこともできます。

関連する問題