2012-09-26 82 views
2

有沒有辦法用Tkinter創建非標準的窗口?我想在屏幕上顯示一些浮動圖像,裏面有Tkinter小部件。想象一下像Growl for Mac,iPad上的Siri,Mac OS音量/亮度變化邊框等等。如果這不可行,是否有辦法擺脫窗口頂部的標題欄並關閉/最小化/調整按鈕大小,並要求完成腳本(或修飾符-Q擊鍵)才能關閉?Tkinter的非標準窗戶?

回答

1

wm_overrideredirect將刪除標準窗口邊框。你仍然會被一個矩形窗口卡住。您可以使用wm_attributes(查找alpha屬性)調整窗口的透明度,但這隻適用於Windows和Mac。

已經有在用的Tcl/Tk,你可能能夠得到與Tkinter的工作,但它需要編譯一些代碼形狀的窗戶嘗試。請參閱tcl'ers wiki上的Managed and shaped toplevel

0

是的,你可以!您可以使用

app.overrideredirect(True)

其中,app = TK()

從這裏你被卡住的窗口是不是頂級,雖然;它也沒有任務欄位置; 來解決這個問題,我們可以使用: app.attributes('-topmost', 1) 但即使現在你只有矩形;你將需要創建一個定製標題欄;這僅僅是一個標題,退出框架,最小化按鈕等

從我們使用的標題欄移動窗口:

def get_pos(event): 
    xwin = app.winfo_x() 
    ywin = app.winfo_y() 
    startx = event.x_root 
    starty = event.y_root 

    ywin = ywin - starty 
    xwin = xwin - startx 


    def move_window(event): 
    app.geometry("400x400" + '+{0}+{1}'.format(event.x_root + xwin, event.y_root + ywin)) 
    startx = event.x_root 
    starty = event.y_root 


    app.TopFrame.bind('<B1-Motion>', move_window) 
app.TopFrame.bind('<Button-1>', get_pos) 

其中TopFrame是標題欄。這種方法似乎過於複雜,但它允許直接在鼠標上移動而不移動到角落。

回答你後一個問題: 使浮動對象是很有可能的;用途:

app.overrideredirect(True) 
app.image = tk.PhotoImage(file='image.GIF') 
image = Label(root, image=app.image, bg='white') 
app.attributes("-transparentcolor", "white")