【问题标题】:Bad geometry specifier in TkinterTkinter 中的错误几何说明符
【发布时间】:2021-09-05 19:25:16
【问题描述】:

我正在尝试将我的程序窗口居中并四处寻找答案,其中大多数都相似,例如 a/2 - b/2。

我尝试了解决方案,但得到了一个错误的回报。一开始我以为是因为我用的是f-string,所以我换掉了%-formatting,结果还是一样的错误。

例如:

import tkinter as tk

root.title("Testing")

window_width = 400
window_height = 200

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

x_coordinate = (screen_width/2) - (window_width/2)
y_coordinate = (screen_height/2) - (window_height/2)

root.geometry(f"{window_width}x{window_height}+{x_coordinate}+{y_coordinate}")

# same result
# root.geometry("%dx%d+%d+%d" % (window_width, window_height, x_coordinate, y_coordinate))

root.mainloop()

以上返回错误几何说明符错误和值“400x200+568.0+332.0”。但是,当我尝试使用返回的内容并重新运行它时,这个问题得到了解决,但没有小数点。原来如此:

root = tk.Tk()
root.title("Testing")
root.geometry('400x200+568+332')
root.mainloop() 

现在窗口居中。所以为此,我只是使用了楼层划分,它解决了这个问题。问题是我不确定是否是这种情况,因为我仍然需要将框架居中,因此了解正在发生的事情将有助于防止发生同样的问题。

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    问题在于root.geometry 无法处理浮点数:您的代码给出的几何说明符是“400x200+483.0+284.0”。这应该可以解决它:

    root.geometry("%dx%d+%d+%d" % (window_width, window_height, int(x_coordinate), int(y_coordinate)))
    

    请注意,我调用int(),因此坐标不再是十进制数字。这会传递一个几何说明符“400x200+483+284”。

    这是因为电脑屏幕上不存在像素的分数。

    【讨论】:

    • 有趣的是tk.Canvas 不介意像素的分数。它实际上可能是在内部对它们进行四舍五入。
    • @TheLizzard 可能是因为窗口管理器不喜欢像素的小部分,root.geometry 正在调用窗口管理器,而使用tk.Canvas,所有像素管理都在内部完成tkinter。
    • @SamMatzko 我还没有学过Canvas,但请问,这两种方法相似吗?如果是这样,由于分数问题,只使用 Canvas 会更好吗?
    • tk.Canvas 不能替代tk.Tktk.Tk 是一个窗口,tk.Canvas 是一个必须在 inside 窗口的小部件。所以,不,这两种方法并不相似。
    • 是的,他们是。 Canvas 基本上就是它听起来的样子:一个画布,您可以在上面画线、形状等。tk.geometry 是一种告诉窗口 (tkinter.Tk) 的位置和大小的方式画面。
    猜你喜欢
    • 2022-08-14
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多