【发布时间】:2020-09-02 02:43:35
【问题描述】:
我正在尝试创建一个 tkinter 按钮类来添加带有文本的调整大小的图像。
按钮按预期在主窗口上呈现正常,但我无法将命令传递给按钮。
BTN_IMG_TXT 的附加 **kwargs 会使用原始 tk.button 创建错误。
因此,我在类定义中使用了以下内容,我认为这是代码的问题部分。
def __init__(self, master, command, *args, **kwargs):
tk.Button.__init__(self,master=master, command=command)
以下是完整的测试代码:
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
window.geometry("300x200")
def remove_item(event = None):
print('Delete button pressed') #debug
# custom button widget
class BTN_IMG_TXT(tk.Button):
def __init__(self, master, command, *args, **kwargs):
tk.Button.__init__(self,master=master, command=command)
self.fname = kwargs.get('fname')
self.btn_txt = kwargs.get('btn_txt')
img = Image.open(self.fname)
image = img.resize((40,40), Image.ANTIALIAS) # make static size
self.photo1= ImageTk.PhotoImage(image)
b = tk.Button(self, text=self.btn_txt, image=self.photo1,
compound="top", width=70, height=70,)
b.pack(side="top")
frm_Main = tk.Frame(master=window, bg='#faeaea', borderwidth=2)
frm_Main.pack()
stp_btn = BTN_IMG_TXT(master=frm_Main,fname="stop_b.png",btn_txt='STOP',command=remove_item)
del_btn= BTN_IMG_TXT(master=frm_Main,fname="delete_b.png",btn_txt='DELETE', command=remove_item)
del_btn.pack(side="left", fill="both", expand=False)
stp_btn.pack(side="left", fill="both", expand=False)
window.mainloop()
【问题讨论】:
标签: python-3.x class tkinter