Python 中带有 class 的按钮命令

Button Command with class in 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。谢谢。

你几乎做对了,但有几个问题

首先,结果永远不会改变,因为您每次计算时都使用相同的数字。结果总是一样的,所以看起来它没有改变。

第二个问题是您正在创建 Tk 的两个实例。 Tkinter 并非设计为那样工作,它会导致问题,例如您正在观察的问题。如果您需要额外的弹出窗口 windows,请使用 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()