带Tkinter的非标准窗户?

时间:2012-09-26 15:17:00

标签: python tkinter

有没有办法用Tkinter创建非标准窗口?我希望屏幕上有浮动图像,里面有Tkinter小部件。想想像Growl for Mac,iPad上的Siri,Mac OS音量/亮度改变边框等等。如果这是不可能的,有没有办法摆脱窗口顶部的标题和关闭/最小化/调整大小按钮,并要求脚本完成(或修饰符-Q键击)关闭?

2 个答案:

答案 0 :(得分:1)

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

已尝试使用tcl / tk塑造窗口,您可能可以使用Tkinter,但它需要编译一些代码。请参阅tcl&#39 wrs上的Managed and shaped toplevel

答案 1 :(得分: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")