引子
近期在用python的tkinter庫開發(fā)一個(gè)GUI,在開發(fā)接近尾聲時(shí)候,同事發(fā)現(xiàn)一個(gè)問題:因GUI窗口較大,在他的筆記本上不能全部展示,而且只能通過點(diǎn)擊頂部狀態(tài)欄才能拖動(dòng),這樣即使鼠標(biāo)已經(jīng)在屏幕最頂部,也無法看到窗口底部的控件。
一個(gè)解決方法就是:窗口及控件可以自適應(yīng)改變。但時(shí)間緊迫,進(jìn)而采用第二個(gè)方案:鼠標(biāo)可以點(diǎn)擊tkinter窗口任意位置進(jìn)行拖動(dòng),這樣就能通過拖動(dòng),看到窗口的任意位置了!
如下例:
import tkinter as tk
'''
鼠標(biāo)點(diǎn)擊tkinter窗口任意位置進(jìn)行拖動(dòng)
'''
class uGUIHandler():
def __init__(self):
self.window = tk.Tk()
self.x, self.y = 0, 0
self.window_size = '800x700'
# 設(shè)置隱藏窗口標(biāo)題欄和任務(wù)欄圖標(biāo)
self.window.overrideredirect(True)
# 設(shè)置窗口大小、位置 長x寬+距離屏幕左邊距離x+距離屏幕上邊距離y
self.window.geometry(f"{self.window_size}+700+20")
# 設(shè)定背景顏色
self.window.configure(bg="LightCyan")
# 窗口移動(dòng)事件
self.window.bind("<B1-Motion>", self.move)
# 單擊事件
self.window.bind("<Button-1>", self.get_point)
# 雙擊事件
self.window.bind("<Double-Button-1>", self.close)
def move(self, event):
"""窗口移動(dòng)事件"""
new_x = (event.x - self.x) + self.window.winfo_x()
new_y = (event.y - self.y) + self.window.winfo_y()
s = f"{self.window_size}+{new_x}+{new_y}"
self.window.geometry(s)
def get_point(self, event):
"""獲取當(dāng)前窗口位置并保存"""
self.x, self.y = event.x, event.y
def run(self):
self.window.mainloop()
def close(self, event):
self.window.destroy()
if __name__ == "__main__":
init_window = uGUIHandler()
init_window.run()
至此問題得以解決。從這個(gè)例子里,還得到獲取當(dāng)前鼠標(biāo)位置的方法。望讀者代碼中挖掘哦~文章來源:http://www.zghlxwxcb.cn/news/detail-502400.html
除此外,對(duì)tkinker窗口的鼠標(biāo)相關(guān)的事件還有:文章來源地址http://www.zghlxwxcb.cn/news/detail-502400.html
<Button-1> 鼠標(biāo)左鍵
<Button-2> 鼠標(biāo)中間鍵(滾輪)
<Button-3> 鼠標(biāo)右鍵
<Double-Button-1> 雙擊鼠標(biāo)左鍵
<Double-Button-3> 雙擊鼠標(biāo)右鍵
<Triple-Button-1> 三擊鼠標(biāo)左鍵
<Triple-Button-3> 三擊鼠標(biāo)右鍵
<B1-Motion> 鼠標(biāo)左鍵滑動(dòng)
<B2-Motion> 鼠標(biāo)滾輪移動(dòng)
<B3-Motion> 鼠標(biāo)右鍵滑動(dòng)
到了這里,關(guān)于Python: 實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊tkinter窗口任意位置拖動(dòng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!