[英]Tkinter python 3 - Moving a borderless window
這篇文章實際上與this有相同的問題,但不是Python 3中的Python 2,而且如果您能准確說出拖動的哪一幀實際按需要移動(例如示例代碼中的“top_Frame”),這也很好.
示例代碼:
from tkinter import *
def main():
root = Tk()
root.geometry("200x200")
root.resizable(0, 0)
root.overrideredirect(1)
back = Frame(root, bg="grey")
back.pack_propagate(0)
back.pack(fill=BOTH, expand=1)
top_Frame = Frame(back, bg="#505050")
top_Frame.place(x=0, y=0, anchor="nw", width=200, height=20)
'''Would Be great if it could be specified to only be moved
when dragging with the Frame above.'''
Ext_but = Button(top_Frame, text="X", bg="#FF6666", fg="white", command=lambda: exit())
Ext_but.place(x=170, y=0, anchor="nw", width=30, height=20)
root.mainloop()
main()
一個完整的例子,它使用一個類來包裝所有功能:
from tkinter import *
class Grip:
''' Makes a window dragable. '''
def __init__ (self, parent, disable=None, releasecmd=None) :
self.parent = parent
self.root = parent.winfo_toplevel()
self.disable = disable
if type(disable) == 'str':
self.disable = disable.lower()
self.releaseCMD = releasecmd
self.parent.bind('<Button-1>', self.relative_position)
self.parent.bind('<ButtonRelease-1>', self.drag_unbind)
def relative_position (self, event) :
cx, cy = self.parent.winfo_pointerxy()
geo = self.root.geometry().split("+")
self.oriX, self.oriY = int(geo[1]), int(geo[2])
self.relX = cx - self.oriX
self.relY = cy - self.oriY
self.parent.bind('<Motion>', self.drag_wid)
def drag_wid (self, event) :
cx, cy = self.parent.winfo_pointerxy()
d = self.disable
x = cx - self.relX
y = cy - self.relY
if d == 'x' :
x = self.oriX
elif d == 'y' :
y = self.oriY
self.root.geometry('+%i+%i' % (x, y))
def drag_unbind (self, event) :
self.parent.unbind('<Motion>')
if self.releaseCMD != None :
self.releaseCMD()
def main():
root = Tk()
root.geometry("200x200")
root.resizable(0, 0)
root.overrideredirect(1)
back = Frame(root, bg="grey")
back.pack_propagate(0)
back.pack(fill=BOTH, expand=1)
top_Frame = Frame(back, bg="#505050")
top_Frame.place(x=0, y=0, anchor="nw", width=200, height=20)
'''Would Be great if it could be specified to only be moved
when dragging with the Frame above.'''
grip = Grip(top_Frame)
Ext_but = Button(top_Frame, text="X", bg="#FF6666", fg="white", command=lambda: exit())
Ext_but.place(x=170, y=0, anchor="nw", width=30, height=20)
root.mainloop()
main()
請注意,此類中有一些額外的位(我從我之前完成的操作中復制了它),因為它可用於限制可以拖動的方向(禁用標志)並在拖動停止時觸發回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.