如何解决如何使Tkinter小部件数组成为OOP方法?
我目前有一个Tkinter小部件数组,这些小部件不是面向对象的:
Image_col = [
tk.Button(
frame,image=root.render1,relief="raised",bg="light gray",# width = ColWidths[j],command=lambda y=y: change_img(y)
)
for y in range(0,rq)
]
为了使用特殊功能,我将小部件self.ButtonA
作为参数传递(就像我在下面的应用程序的过分简化版本中所做的那样),看来我现在需要获取一个对象面向对象的方法,并定义一个我可以重复使用的类。
class MinCodeEx:
global waitingforImage
def __init__(self,master):
self.master = master
self.ButtonA = tk.Button(width=60,height=40,command = lambda: self.UpdateImg())
self.ButtonA.pack()
self.ButtonA.img = None
def UpdateImg(self):
newDialog = snipping_tool.AcquireImage(self.master,self.ButtonA)
我还能如何将UpdateImage
之类的函数附加到Image_col
中的每个tk.Button上?如果不采取OOP的方式,这似乎是不可能的。我的问题是:我应该如何以OOP的方式构造Image_col
?这似乎很接近,但对我而言不起作用。必须缺少一些东西:
class ImageCol(tk.Button):
def __init__(self,master,y):
super().__init__(master)
self.master = master
self.y = y
self.btn = tk.Button(
frame,bg="blue",#bg="light gray",command=lambda y=y: self.change_img)
def change_img(self):
snipping_tool.AcquireImage(self.master,self.btn)
j: int = 1
Image_col = [
ImageCol(frame,y)
for y in range(0,rq)
]
让我知道您是否需要更多我的代码。对我来说,将其简化为一个最低限度的示例以在此处显示它具有挑战性。
可能要注意的最有用的事情是,change_image(y)
应该用index = y
来更改与tkinter按钮关联的图像。
解决方法
我测试了您的代码,但未运行该函数。我已经通过更改解决了:
command=lambda y=y: self.change_img
至command=self.change_img
。您不必告诉班级是哪个按钮,就像您已经使用self
一样。
我为了测试而删除了一些功能(我认为它不会影响程序,但是如果仍然失败,请先检查一下):我删除了按钮图像(因为我没有任何图像),我将change_img()
的内容替换为带有buttonID(或y)的简单打印,将rq
替换为随机整数,并在脚本开始处添加了import tkinter as tk; frame = tk.Tk()
和{{1 }}。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。