pythonware.com/library/tkinter/introduction/... 记录overrideredirect方法 这会删除thetitar和 边界,如果这还不够你 必须设置本机窗口样式,我 不确定Tkinter是否给你这个 一种低级访问,如果没有,请尝试 类似的东西 twapi.magicsplat.com/ui.html#set_window_style TCL扩展
在之前的一篇文章中,我得到了关于如何在Tkinter获得边框的回复,类似于下图所示。我不熟悉Tcl及其扩展。那怎么会这样呢?最终目标基本上是在Tkinter窗口下方获取边框。
alt text http://i30.tinypic.com/69jm2a.png
修改:
我在Windows 7上使用了以下内容,它似乎没有改变风格。它可能遗漏了一些东西。任何帮助将不胜感激,这可能真的很酷!
import string, win32ui, win32con
import Tkinter as tk
root = tk.Tk()
frame = win32ui.CreateWindowFromHandle(string.atoi(root.wm_frame(), 0))
frame.ModifyStyle(win32con.WS_CAPTION, 0, win32con.SWP_FRAMECHANGED)
root.mainloop()
答案 0 :(得分:4)
您可以使用Python win32 api包和Tkinter的组合来完成此操作。您需要知道的是,Tk窗口是Win32窗口的客户端部分。使用包装器处理窗口管理器交互,该包装器是Tk窗口本身的父包。如果你有一个Tkinter窗口'w',那么你可以为框架创建一个PyWin32窗口或直接操作它。您可以使用w.wm_frame()获取帧hwnd并解析返回的十六进制字符串,或者使用GetParent来自Tk窗口的winfo_id值(尽管wm_frame可能更可靠)。
import string, win32ui, win32con
from Tkinter import *
w = Tk()
frame = win32ui.CreateWindowFromHandle(string.atoi(w.wm_frame(), 0))
frame.ModifyStyle(win32con.WS_CAPTION, 0, win32con.SWP_FRAMECHANGED)
这将删除WS_CAPTION样式并通知窗口其框架已被修改,这会强制进行几何体重新计算,以便更改传播到Tk子窗口。
编辑--- 以下内容安排确保在窗口完全创建并映射到显示器后修改窗口样式。
import string, win32ui, win32con
from Tkinter import *
def decaption(event):
w = event.widget
frame = win32ui.CreateWindowFromHandle(string.atoi(w.wm_frame(), 0))
frame.ModifyStyle(win32con.WS_CAPTION, 0, win32con.SWP_FRAMECHANGED)
w.bind("<Map>", None)
root = Tk()
root.bind("<Map>", decaption)
root.mainloop()
答案 1 :(得分:2)
一种解决方案是绘制自己的边框。使用overrideredirect
删除所有装饰,网格/打包/放置填充窗口的画布,然后绘制或使用位图来获得所需的视觉效果。你必须添加自己的绑定来移动和调整窗口大小,但这并不太难。