正如我们在评论中讨论的那样,我怀疑你无法使用纯tkinter来完成它。
我尝试使用win32gui实现获取包括边框的窗口大小的解决方案。从这些信息中,您应该能够实现其余的功能。不幸的是,这仅适用于Windows平台,并需要在pywin32上进行安装。您可以在此处获取它。如果有要求,我相信Mac和Linux也有类似的解决方案。
这是我在Python 3.4中测试的解决方案:
import tkinter as tk
import win32gui
class TestApp:
def __init__(self, master):
frame = tk.Frame(master)
frame.pack()
self.master = master
label = tk.Label(text='Test Label')
label.pack()
b1 = tk.Button(text='test', command=self.pressed)
b1.pack()
def pressed(self):
win32gui.EnumWindows(self.callback, None)
x = root.winfo_x()
y = root.winfo_y()
w = self.master.winfo_width()
h = self.master.winfo_height()
print('tkinter location: ({},{})'.format(x, y))
print('tkinter size: ({},{})'.format(w, h))
def callback(self, hwnd, extra):
if "Test title" in win32gui.GetWindowText(hwnd):
rect = win32gui.GetWindowRect(hwnd)
x = rect[0]
y = rect[1]
w = rect[2] - x
h = rect[3] - y
print('Window location: ({},{})'.format(x, y))
print('Window size: ({},{})'.format(w, h))
root = tk.Tk()
root.title("Test title")
app = TestApp(root)
root.mainloop()
我正在使用win32gui.EnumWindows()来遍历所有可用的窗口,以定位具有正确标题的窗口。然后,我可以使用win32gui.GetWindowRect()获取其大小。
我将打印win32gui和tkinter的结果到控制台进行比较。