【发布时间】:2019-05-05 02:55:43
【问题描述】:
所以我一直在尝试在我的 tkinter 项目中使用类,但我似乎无法准确理解类如何交互。特别是当涉及 tkinter 时。我可以访问变量和值并传递它们,但我似乎无法弄清楚如何进行触发器。
我目前的问题是尝试从不同的类触发事件。 问题的一个简单版本是这样的:
from tkinter import *
class Area:
def __init__(self):
self.can = Canvas(width=100, height=100, bg="green")
self.can.pack(in_=window)
self.can.bind("<Button-3>", self.test)
self.square = self.can.create_rectangle(25, 25, 75, 75)
def test(self, event):
self.can.delete("all")
class Trigger:
def __init__(self):
self.button = Button(text="click me", command=?)
self.button.pack(in_=window)
window = Tk()
Area()
Trigger()
window.mainloop()
它创建了一个中间有一个正方形的绿色画布。当您右键单击画布时,正方形被删除。然后我尝试从不同的类中触发相同的行为,这里用一个按钮演示。
问题是,我一生都无法弄清楚按钮上的命令是什么。
我试过command=Area.test,但我得到了“
TypeError: test() 缺少 2 个必需的位置参数:'self' 和 '事件'"
我尝试了command=Area.test(Area, "event") 和command=Area.test(self, "event"),但它们返回:
AttributeError: type object 'Area' has no attribute 'can'
和
AttributeError: type object 'Area' has no attribute 'can'
我还尝试了Area().test("event),它没有出错,但给了我 2 个画布实例,一个带有正方形,一个没有。然后按钮什么也没做。
研究了继承,所以我尝试通过将 Area 作为继承放在 Trigger 类上,然后执行 command=self.test("event")
但后来得到:
AttributeError: 'Trigger' 对象没有属性 'can'
所以我没有想法..我做错了__init__part 吗?
【问题讨论】:
标签: python class tkinter triggers