如何使用 guiZero 获取 canvas 当前大小
How to get canvas current size with guiZero
我的目标是制作根据 canvas 大小而变化的 GUI。我需要能够主动检查 window 大小,以便我知道何时显示额外内容。
使用
Python 3.8.2
归零
我终于能够做点什么了,但是在应用程序退出后它确实会抛出错误。
w=None
while True:
x=app.tk.winfo_height()
if x!=w:
print(x)
w=app.tk.winfo_height()
app.update()
您可以在 canvas 上使用 tkinter
事件 <Configure>
:
def on_resize(event):
print(app.height)
...
app.tk.bind('<Configure>', on_resize)
我在创建数字蚀刻草图时遇到了这个问题,使用 Raspberry Pi 和两个电位器作为水平和垂直控制。如何获取canvas的当前大小?恼人的是,当您将高度和宽度设置为 "fill" 然后尝试询问这些值时,您得到的只是 "fill",如果您试图确定可用 [=18] 的上限,这是没有用的=].我深入研究对象层次结构,发现 .tk_winfo_height() 和 .tk.winfo_width() return 整数值。为此,我删除了对电位器转动做出反应的代码,并在屏幕底部放置了一排按钮来控制垂直和水平移动。
from guizero import App, Box, Drawing, PushButton
x = 0
y = 0
def clear_screen():
drawing.clear()
def move_left():
global x, y
if x > 0 :
drawing.line(x, y, x - 1, y)
x = x - 1
def move_right():
global x, y
if x < drawing.tk.winfo_width() :
drawing.line(x, y, x + 1, y)
x = x + 1
def move_up():
global x, y
if y > 0 :
drawing.line(x, y, x, y - 1)
y = y - 1
def move_down():
global x, y
if y < drawing.tk.winfo_height() :
drawing.line(x, y, x, y + 1)
y = y + 1
app = App()
drawing = Drawing(app, height="fill", width="fill")
drawing.bg="white"
bbox = Box(app, align="bottom")
lbtn = PushButton(bbox, align="left", command=move_left, text="Left")
ubtn = PushButton(bbox, align="left", command=move_up, text="Up")
cbtn = PushButton(bbox, align="left", command=clear_screen, text="Clear")
rbtn = PushButton(bbox, align="left", command=move_right, text="Right")
dbtn = PushButton(bbox, align="left", command=move_down, text="Down")
app.display()
我的目标是制作根据 canvas 大小而变化的 GUI。我需要能够主动检查 window 大小,以便我知道何时显示额外内容。 使用 Python 3.8.2 归零
我终于能够做点什么了,但是在应用程序退出后它确实会抛出错误。
w=None
while True:
x=app.tk.winfo_height()
if x!=w:
print(x)
w=app.tk.winfo_height()
app.update()
您可以在 canvas 上使用 tkinter
事件 <Configure>
:
def on_resize(event):
print(app.height)
...
app.tk.bind('<Configure>', on_resize)
我在创建数字蚀刻草图时遇到了这个问题,使用 Raspberry Pi 和两个电位器作为水平和垂直控制。如何获取canvas的当前大小?恼人的是,当您将高度和宽度设置为 "fill" 然后尝试询问这些值时,您得到的只是 "fill",如果您试图确定可用 [=18] 的上限,这是没有用的=].我深入研究对象层次结构,发现 .tk_winfo_height() 和 .tk.winfo_width() return 整数值。为此,我删除了对电位器转动做出反应的代码,并在屏幕底部放置了一排按钮来控制垂直和水平移动。
from guizero import App, Box, Drawing, PushButton
x = 0
y = 0
def clear_screen():
drawing.clear()
def move_left():
global x, y
if x > 0 :
drawing.line(x, y, x - 1, y)
x = x - 1
def move_right():
global x, y
if x < drawing.tk.winfo_width() :
drawing.line(x, y, x + 1, y)
x = x + 1
def move_up():
global x, y
if y > 0 :
drawing.line(x, y, x, y - 1)
y = y - 1
def move_down():
global x, y
if y < drawing.tk.winfo_height() :
drawing.line(x, y, x, y + 1)
y = y + 1
app = App()
drawing = Drawing(app, height="fill", width="fill")
drawing.bg="white"
bbox = Box(app, align="bottom")
lbtn = PushButton(bbox, align="left", command=move_left, text="Left")
ubtn = PushButton(bbox, align="left", command=move_up, text="Up")
cbtn = PushButton(bbox, align="left", command=clear_screen, text="Clear")
rbtn = PushButton(bbox, align="left", command=move_right, text="Right")
dbtn = PushButton(bbox, align="left", command=move_down, text="Down")
app.display()