2015-07-19 67 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()