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()
我正在努力解决这个问题,但到目前为止运气不好。如果有人能帮助我,我将不胜感激。
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()