2015-04-15 71 views
0

我知道如何使用overrideredirect從Tkinter窗口中刪除邊框,但每當我這樣做時窗口就會變得無法響應。我無法使用alt以及拖動或其他方法移動它。
我想製作一個應用程序,看起來像那些僅僅是一個空窗口的「riced」應用程序,顯然,如果它只是在左上角沒有響應,我就無法走得很遠。那麼,我該怎麼做?使用overrideredirect時拖動窗口

回答

7

若要使窗口可拖動,請在窗口上放置<Button-1>(鼠標點擊)和<B1-Motion>(鼠標移動)的綁定。

所有你需要做的是存儲在x和鼠標按下事件的y值,然後在鼠標移動事件,你的位置基於當前指針 x和y,三角洲原來事件 X窗口和y。

鼠標單擊綁定的處理程序存儲原始事件x和y。

鼠標移動綁定處理程序調用TopLevel方法geometry()根據當前鼠標位置以及最近一次鼠標單擊時存儲的偏移量重新定位窗口。您可以將幾何字符串提供給幾何方法。

這裏不考慮屏幕的邊緣一個很小的例子:

import tkinter 

class Win(tkinter.Tk): 

    def __init__(self,master=None): 
     tkinter.Tk.__init__(self,master) 
     self.overrideredirect(True) 
     self._offsetx = 0 
     self._offsety = 0 
     self.bind('<Button-1>',self.clickwin) 
     self.bind('<B1-Motion>',self.dragwin) 

    def dragwin(self,event): 
     x = self.winfo_pointerx() - self._offsetx 
     y = self.winfo_pointery() - self._offsety 
     self.geometry('+{x}+{y}'.format(x=x,y=y)) 

    def clickwin(self,event): 
     self._offsetx = event.x 
     self._offsety = event.y 


win = Win() 
win.mainloop() 
+0

這個工作很好,謝謝! – omgimdrunk

+0

我剛剛解決了跳到代碼中的窗口的問題,請使用ButtonPress-1而不是Button-1 – omgimdrunk

+0

不幸的是,我的窗口仍然在跳 - 只有當我點擊遠端的右下邊緣時,窗口才會跳起來。 – Alex