[英]How to put widgets inside a ttk.Button
有沒有在ttk.Button內嵌套小部件的正確方法? 它支持指定一個標簽(一個str
)和一個圖像(一個PhotoImage
),我認為這些標簽是使用子代小部件實現的。
這是一個向按鈕添加左對齊標簽和右對齊標簽的示例。
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
normal_button = ttk.Button(root, text="Normal Button")
normal_button.pack(fill=tk.X)
custom_button = ttk.Button(root)
custom_button.pack(fill=tk.X)
left_label = ttk.Label(custom_button, text="Left")
left_label.pack(side=tk.LEFT, padx=16, pady=4)
right_label = ttk.Label(custom_button, text="Right")
right_label.pack(side=tk.RIGHT, padx=16, pady=4)
root.mainloop()
這種工作,但有一些怪癖:
是否有將小部件包裝在按鈕內的正確方法?
正如我在評論中所說,您可以創建自己的小部件。
這是一個使用tk.Frame
和tk.Label
的簡單示例( ttk.Label
需要使用ttk.Style
更多工作)。
我綁定事件<Enter>
和<Leave>
來更改框架並標記背景。
對於更多的小部件,您可以將它們保留在列表中,並使用for
循環更改背景。
import tkinter as tk
import tkinter.ttk as ttk
class MyButton(tk.Frame):
def __init__(self, master, bg_hover='red', bg_normal=None, **options):
tk.Frame.__init__(self, master, **options)
self.bg_normal = bg_normal
self.bg_hover = bg_hover
# use default color if bg_normal is `None`
if not self.bg_normal:
self.bg_normal = self['bg']
# add first label
self.left_label = tk.Label(self, text="Left")
self.left_label.pack(side=tk.LEFT, padx=16, pady=4)
# add second label
self.right_label = tk.Label(self, text="Right")
self.right_label.pack(side=tk.RIGHT, padx=16, pady=4)
# bind events
self.bind('<Enter>', self.on_enter)
self.bind('<Leave>', self.on_leave)
def on_enter(self, event=None):
# change all backgrounds on mouse enter
self['bg'] = self.bg_hover
self.left_label['bg'] = self.bg_hover
self.right_label['bg'] = self.bg_hover
def on_leave(self, event=None):
# change all backgrounds on mouse leave
self['bg'] = self.bg_normal
self.left_label['bg'] = self.bg_normal
self.right_label['bg'] = self.bg_normal
root = tk.Tk()
normal_button = ttk.Button(root, text="Normal Button")
normal_button.pack(fill=tk.X)
my_button = MyButton(root)
my_button.pack()
root.mainloop()
沒有正確的方法將小部件打包在按鈕內。 按鈕不是為此功能設計的。 如您所見,您確實可以使用pack
或grid
將小部件放置在按鈕內。 但是,您必須添加自定義綁定,以使其看起來像是一鍵式小部件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.