實現tkinter中button形狀改變的方法
阿新 • • 發佈:2018-11-05
最近在做的一個類似掃雷的小遊戲,需要通過點選一些小圓圈使其變色,我的第一個想法就是使用tkinter中的button部件,繫結相應的響應函式使其在被點選時變色,然而tkinter中的button元件預設為矩形,且沒有形狀屬性,無法變更為圓形,經過一番探索,找到了以下兩個辦法。
一、使用canvas元件
tkinter中自帶的一個元件,可以根據輸入的引數繪製各種形狀,並且可以通過bind方法繫結各種事件及其響應,非常強大。
from tkinter import * win = Tk() cv = Canvas(win) cv.grid() x1, y1 = 50, 50 r = 50 x2, y2 = x1+2*r, y1+2*r btn = cv.create_oval(x1, y1, x2, y2, fill='black') def left1(e): cv.itemconfig(btn, fill='red') def left2(e): cv.itemconfig(btn, fill='gold') def right(e): cv.itemconfig(btn, fill='green') cv.bind('<Button-1>', left1) cv.bind('<Double-Button-1>', left2) cv.bind('<Button-3>', right) win.mainloop()
以上示例為canvas物件綁定了三個響應事件(左鍵單擊、左鍵雙擊、右鍵單擊),關於canvas能響應的更多事件,參考https://blog.csdn.net/DawnRanger/article/details/48770181?locationNum=2&fps=1
二、使用graphic庫
graphic庫中的windows實際上也是canvas物件,所以可以在上面繪製各種型別的圖形,同時graphic庫中包含一個getMouse()方法來獲取滑鼠的點選座標,之後根據滑鼠點選的位置進行相應的反應即可