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