PySimpleGUI:如何检测元素超出窗口边界?
在下面的例子中,有一行的元素比窗口能显示的要多。我们该如何检测这些元素溢出了呢?
import PySimpleGUI as sg
layout = [[sg.Text(f"word{i}") for i in range(30)]]
window = sg.Window("Demo", layout, size=(500, 100))
window.finalize()
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
1 个回答
1
文本元素的大小会因为不同的字体和不同长度的文本而有所不同。
import PySimpleGUI as sg
font = ("Courier New", 10)
sg.set_options(font=font)
layout = [[sg.Text(f"word{i}", key=f"TEXT {i}") for i in (0, 10)]]
window = sg.Window("Demo", layout, size=(500, 100), finalize=True)
window.refresh()
text0 = window['TEXT 0'].widget
w0, h0 = text0.winfo_width(), text0.winfo_height()
text10 = window['TEXT 10'].widget
w10, h10 = text10.winfo_width(), text10.winfo_height()
print(w0, h0, w10, h10)
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
window.close()
44 20 52 20
这里使用的是等宽字体 ('Courier New', 10)
,通过上面的代码,我们可以得到4个字符和5个字符文本的基本宽度和高度,分别是44/20和52/20。
你的代码中有10个4个字符的文本和20个5个字符的文本,还有默认的内边距(5, 3)和窗口的默认边距(10, 5)。
如果没有问题的话,你可以这样计算:
- 宽度 = 10 x (44 + 5 x 2) + 20 x (52 + 5 x 2) = 540 + 1240 = 1780 >> 480 = 500 - 10 x 2
- 高度 = 20 << 90 = 100 - 5 x 2