簡體   English   中英

使用Tkinter的非標准窗戶?

[英]Non-standard windows with Tkinter?

有沒有辦法用Tkinter創建非標准窗口? 我想在屏幕上放些浮動圖像,並在其中放置Tkinter小部件。 想一些類似Mac的Growl,iPad上的Siri,Mac OS的音量/亮度更改邊框等。如果無法做到這一點,是否有辦法擺脫帶有標題的窗口頂部欄並關閉/最小化/ resize按鈕,並要求腳本完成(或使用修飾符Q鍵)以關閉?

wm_overrideredirect將刪除標准窗口邊框。 您仍然會被矩形窗口困住。 您可以使用wm_attributes調整窗口的透明度(查找alpha屬性),盡管這僅適用於Windows和Mac。

已經嘗試過使用tcl / tk整形窗口,盡管可能需要編譯一些代碼,但是您也許可以使用Tkinter來使用它。 請參閱tcl'ers Wiki上的Managed and Shape 頂層

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

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM