2012-09-26 39 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")