如何在PySimpleGUI中响应窗口大小调整

4

如何在PySimpleGUI中监听窗口调整大小的事件?

我有一个可以启用调整大小事件的窗口,但是当调整窗口大小时,我找不到一种方法来移动其中的元素,使得当窗口大小改变时,我的窗口保持顶部居中且大小相同。

以下是基本代码:

import PySimpleGUI as sg

layout = [[sg.Button('Save')]]
window = sg.Window('Window Title', 
                   layout,
                   default_element_size=(12, 1),
                   resizable=True)  # this is the change

while True:
    event, values = window.read()
    if event == 'Save':
        print('clicked save')

    if event == sg.WIN_MAXIMIZED:  # I just made this up, and it does not work. :)
        window.maximize()

    if event == sg.WIN_CLOSED:
        break
2个回答

7

在窗口中添加tkinter事件会导致在更改窗口大小时回调。

import PySimpleGUI as sg


layout = [[sg.Button('Save')]]
window = sg.Window('Window Title',
                   layout,
                   default_element_size=(12, 1),
                   resizable=True,finalize=True)  # this is the chang
window.bind('<Configure>',"Event")

while True:
    event, values = window.read()
    if event == 'Save':
        print('clicked save')

    if event == "Event":
        print(window.size)

    if event == sg.WIN_CLOSED:
        print("I am done")
        break

2
+1 提到 window.size。它可以用于创建一个非 tkinter 特定的解决方案(使用 window.read(timeout=100) 并检查大小是否有变化)。 - rtrrtr

3
你需要绑定"<Configure>"事件来检查缩放事件。
import PySimpleGUI as sg

layout = [[sg.Text('Window normal', size=(30, 1), key='Status')]]
window = sg.Window('Title', layout, resizable=True, finalize=True)
window.bind('<Configure>', "Configure")
status = window['Status']

while True:

    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == 'Configure':
        if window.TKroot.state() == 'zoomed':
            status.update(value='Window zoomed and maximized !')
        else:
            status.update(value='Window normal')

window.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接