2015-07-19 66 views
0

我試圖讓這個權利,但到目前爲止沒有運氣。如果有人能幫助我,我將不勝感激。按鈕Python中的類命令

import tkinter 
class MyGUI: 
    def __init__(self): 
     self.main_window = tkinter.Tk() 
     self.button1 = tkinter.Button(self.main_window,text='Average',command=self.average) 
     self.button1.pack() 
     tkinter.mainloop() 
    def average(self): 
     self.mini_window = tkinter.Tk() 
     self.avg_mess = tkinter.Label(self.mini_window,text='Results:') 
     self.avg_result_var = tkinter.StringVar() 
     self.avg_result_display = tkinter.Label(self.mini_window,textvariable=self.avg_result_var) 
     self.avg_mess.pack() 
     self.avg_result_display.pack() 
     self.button2 = tkinter.Button(self.mini_window,text='Calculate',command=self.avg_calc) 
     self.button2.pack() 
    def avg_calc(self): 
     self.avg_result = (100+300+80)/3 
     self.avg_result_var.set(self.avg_result) 
gui = MyGUI() 

問題是點擊Calculate按鈕時發生但avg_result_var不改變其值。因此avg.result_display保持空白。我懷疑當按下按鈕時函數調用有問題。我使用Python 3.x.謝謝。

回答

0

你幾乎做正確的,但有幾個問題

首先,結果不會改變,因爲你用每次做一個計算時間相同的數字。結果總是相同的,所以它看起來並沒有改變。

第二個問題是您正在創建Tk的兩個實例。 Tkinter的設計不是像這樣工作的,它會導致諸如您正在觀察的問題。如果您需要其他彈出窗口,請使用Toplevel而不是Tk

下面是你的程序的一個修改版本,雖然我在計算中添加了一個隨機數,所以你可以看到它每次都會改變。

import Tkinter as tkinter 
import random 
class MyGUI: 
    def __init__(self): 
     self.main_window = tkinter.Tk() 
     self.button1 = tkinter.Button(self.main_window,text='Average',command=self.average) 
     self.button1.pack() 
     tkinter.mainloop() 
    def average(self): 
     self.mini_window = tkinter.Toplevel() 
     self.avg_mess = tkinter.Label(self.mini_window,text='Results:') 
     self.avg_result_var = tkinter.StringVar() 
     self.avg_result_display = tkinter.Label(self.mini_window,textvariable=self.avg_result_var) 
     self.avg_mess.pack(fill="both") 
     self.avg_result_display.pack() 
     self.button2 = tkinter.Button(self.mini_window,text='Calculate',command=self.avg_calc) 
     self.button2.pack() 
    def avg_calc(self): 
     x = random.randint(100,200) 
     self.avg_result = (100+300+x)/3 
     print "result:", self.avg_result 
     self.avg_result_var.set(self.avg_result) 
gui = MyGUI()