引子
近期在用python的tkinter库开发一个GUI,在开发接近尾声时候,同事发现一个问题:因GUI窗口较大,在他的笔记本上不能全部展示,而且只能通过点击顶部状态栏才能拖动,这样即使鼠标已经在屏幕最顶部,也无法看到窗口底部的控件。
一个解决方法就是:窗口及控件可以自适应改变。但时间紧迫,进而采用第二个方案:鼠标可以点击tkinter窗口任意位置进行拖动,这样就能通过拖动,看到窗口的任意位置了!
如下例:
import tkinter as tk
'''
鼠标点击tkinter窗口任意位置进行拖动
'''
class uGUIHandler():
def __init__(self):
self.window = tk.Tk()
self.x, self.y = 0, 0
self.window_size = '800x700'
# 设置隐藏窗口标题栏和任务栏图标
self.window.overrideredirect(True)
# 设置窗口大小、位置 长x宽+距离屏幕左边距离x+距离屏幕上边距离y
self.window.geometry(f"{self.window_size}+700+20")
# 设定背景颜色
self.window.configure(bg="LightCyan")
# 窗口移动事件
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):
"""窗口移动事件"""
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):
"""获取当前窗口位置并保存"""
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()
至此问题得以解决。从这个例子里,还得到获取当前鼠标位置的方法。望读者代码中挖掘哦~文章来源:https://www.toymoban.com/news/detail-502400.html
除此外,对tkinker窗口的鼠标相关的事件还有:文章来源地址https://www.toymoban.com/news/detail-502400.html
<Button-1> 鼠标左键
<Button-2> 鼠标中间键(滚轮)
<Button-3> 鼠标右键
<Double-Button-1> 双击鼠标左键
<Double-Button-3> 双击鼠标右键
<Triple-Button-1> 三击鼠标左键
<Triple-Button-3> 三击鼠标右键
<B1-Motion> 鼠标左键滑动
<B2-Motion> 鼠标滚轮移动
<B3-Motion> 鼠标右键滑动
到了这里,关于Python: 实现鼠标点击tkinter窗口任意位置拖动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!