我正在嘗試為按鈕分配一些行為,我已經實作了一些行為,例如:
- 如果滑鼠位于按鈕上,則更改按鈕的顏色。
- 恢復默認按鈕顏色。
- 以綠色保存最后按下的按鈕。
今天我意識到當我按下一個按鈕而不釋放點擊,我將滑鼠指標移離按鈕并釋放點擊,它變成綠色,但沒有執行鏈接的功能,我希望按鈕不要改變顏色。我試圖消除這種行為,但我沒有想法。該代碼是可執行的,它適用于 python 3.7。謝謝。
from tkinter import *
class TypeButton(Button):
def __init__(self, parent, *args, **kwargs):
kwargs = {'font':('Calibri',9,'bold'), 'bg': '#11161d', 'fg':'white',
'width':10, 'bd':0, 'activebackground':'#bdfe04', **kwargs}
super().__init__(parent, *args, **kwargs)
class Example(Frame):
def __init__(self,parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.frame = Frame(self, bg='#11161d')
self.frame .grid(padx=(10,10), pady=(6,6))
self.container1 = None
self.creator_buttons()
#????????????????
self.bind_all("<B1-Motion>", self.callback)
def creator_buttons(self):
mobiles = [['Frog', 'Fox', 'Boomer', 'Ice', 'J.d', 'Grub', 'Lightning', 'Aduka', 'Knight', 'Kalsiddon', 'Mage'],
['Randomizer', 'Jolteon', 'Turtle', 'Armor', 'A.sate', 'Raon', 'Trico', 'Nak', 'Bigfoot', 'Barney', 'Dragon']]
self.mobiles2 = ['Fox','Knight','Jolteon','Barney','Dragon']
self.buttons22 = []
for index1, mobil in enumerate(mobiles):
for index2, texto in enumerate(mobil):
number = 11 if index1 == 1 else 0
btn = B1ButtonCls (self.frame_1, text=texto, command= self.callback)
n1 = 5 if index2 == 0 else 0
n2 = 5 if index2 == 10 else 0
btn .grid(column=index2 , row=index1 , pady=3, padx=(n1,n2))
btn.bind("<Enter>", self.enter_mouse)
btn.bind("<Leave>", self.leave_mouse)
btn.bind("<Button-1>", self.clic_mouse)
if texto in self.mobiles2: btn.config(fg='yellow')
self.buttons22.append(btn)
def enter_mouse(self, event):
widget1 = event.widget
if not widget1 .cget('bg') == '#bdfe04':
widget1 .config(bg="#24364a")
def leave_mouse(self, event):
if not event.widget .cget('bg') == '#bdfe04':
event.widget.config(bg='#11161d')
def clic_mouse(self, event):
widget1 = event.widget
widget1.config(bg='#bdfe04', fg='black')
if self.container1 is not None and self.container1 != widget1:
if self.container1 .cget('text') in self.mobiles2:
self.container1 .config (bg='#11161d', fg='yellow')
else:
self.container1 .config (bg='#11161d', fg='white')
self.container1 = widget1
def callback(self):
print('Closed')
root = Tk()
app = Example(root).pack()
root.mainloop()
uj5u.com熱心網友回復:
winfo_containing當您釋放按鈕時,您可以使用該方法來知道滑鼠下方是哪個小部件。然后,您可以將該函式呼叫的結果與單擊的小部件進行比較。
這是一個示例,它根據您是否在單擊的同一個小部件上釋放滑鼠按鈕來顯示兩個文本訊息之一。
import tkinter as tk
def _button_press(event):
label.configure(text="")
def _button_release(event):
widget_under_cursor = event.widget.winfo_containing(event.x_root, event.y_root)
if widget_under_cursor == event.widget:
label.configure(text="you released over the button")
else:
label.configure(text="you did not release over the button")
root = tk.Tk()
label = tk.Label(root, width=40)
label.pack(side="top", fill="x")
for i in range(10):
button = tk.Button(root, text=f"Button #{i 1}")
button.pack()
button.bind("<ButtonPress-1>", _button_press)
button.bind("<ButtonRelease-1>", _button_release)
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323743.html
