4

有没有办法用 Tkinter 创建非标准窗口?我想在屏幕上显示一些浮动图像,里面有 Tkinter 小部件。想想 Mac 的 Growl、iPad 上的 Siri、Mac OS 音量/亮度变化边框等。如果这不可能,有没有办法摆脱带有标题的窗口顶部栏并关闭/最小化/resize 按钮,并且需要脚本完成(或修饰符-Q 击键)才能关闭?

4

2 回答 2

1

wm_overrideredirect将删除标准窗口边框。你仍然会被一个矩形窗口困住。您可以使用wm_attributes调整窗口的透明度(查找alpha属性),但这仅适用于 Windows 和 Mac。

已经尝试过使用 tcl/tk 来塑造窗口,尽管它需要编译一些代码,但您可能可以使用 Tkinter。请参阅tcl'ers wiki 上的Managed and Shaped toplevel 。

于 2012-09-26T16:04:37.657 回答
1

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

app.overrideredirect(True)

其中应用程序 = 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")
于 2018-02-12T21:46:45.780 回答