PySimpleGUI:如何检测元素超出窗口边界?

0 投票
1 回答
38 浏览
提问于 2025-04-14 17:25

在下面的例子中,有一行的元素比窗口能显示的要多。我们该如何检测这些元素溢出了呢?

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

撰写回答