【发布时间】:2020-12-09 17:35:59
【问题描述】:
我正在使用窗口的类对象创建一个 GUI。这个窗口有很多按钮来打开和关闭不同的设置面板。我的类的一个简单示例是这样的:
import tkinter as tk
class MyWindow(object):
def __init__(self):
# flags which are used to draw settings panels if True, and not draw if False
self.settings1 = True
self.settings2 = True
# create frames for each panel of settings
self.frame1 = tk.LabelFrame(window, text = "First panel")
self.frame2 = tk.LabelFrame(window, text = "Second panel")
self.frame1.grid()
self.frame2.grid()
# add button widget to each frame
self.button1 = tk.Button(self.frame1, text = "ON", bg = "green", command = lambda: self.changeButtonState(self.button1, self.settings1))
self.button2 = tk.Button(self.frame2, text = "ON", bg = "green", command = lambda: self.changeButtonState(self.button2, self.settings2))
self.button1.grid()
self.button2.grid()
def changeButtonState(self, button, flag):
if button["text"] == "ON":
button["text"] = "OFF"
button["bg"] = "red"
# change the state of the given flag
flag = False
else:
button["text"] = "ON"
button["bg"] = "green"
# change state of flag
flag = True
print("Settings 1: ", self.settings1, "\nSettings 2: ", self.settings2)
# create the window
window = tk.Tk()
x = MyWindow()
window.mainloop()
按钮颜色和文字变化良好,但self.settings1 和self.settings2 的值在您单击按钮时保持不变。我不明白为什么,因为函数中的flag应该是类属性之一,但它却把它当作一个新变量!
如何创建一个通用函数来改变传递给它的类属性的状态?
【问题讨论】:
-
stackoverflow.com/questions/986006/… 这是一篇解释为什么你的实现不起作用的帖子
标签: python class user-interface tkinter attributes