You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySimpleGUI f-string格式设置及Test按钮点击后选项按钮不显示求助

PySimpleGUI 开发问题解决方案

1. 乘法表字符串对齐问题

问题原因

  • corecode函数else分支的列表推导式中误用了未定义的变量j,实际应该使用传入的参数base作为乘数
  • 格式配置不统一:base=1的分支乘数用了>3d宽度,其他分支用>2d,且部分行开头存在多余的前置空格,导致多行内容错位

修正方案

统一所有行的格式化规则:两个乘数都用>2d右对齐,乘积用>3d右对齐,移除多余的前置空格,修正变量引用错误。
修正后的corecode函数:

def corecode(base):
    lines = []
    for i in range(1, 11):
        lines.append(f'{i:>2d} * {base:>2d} = {i*base:>3d}')
    return ("\n"+"-"*13+"\n").join(lines)

2. 选项按钮无法显示问题

问题原因

  • 4个选项按钮使用了重复的key -Button-,PySimpleGUI要求所有控件的key必须全局唯一,重复key会导致控件定位异常
  • 4个按钮放在初始隐藏的showtest_column列容器中,父容器处于隐藏状态时,即使修改子控件的可见性也无法正常显示

修正方案

  1. 给showtest_column添加唯一key,点击Test按钮时直接修改该列的可见性即可批量控制内部所有按钮的显隐
  2. 将4个选项按钮的key改为唯一值,方便后续绑定答题逻辑

关键修改点:

  • 给列添加key:sg.Column(showtest_column, visible=False, key="-TEST_COL-")
  • 点击Test按钮时修改列的可见性,而非单独修改按钮:window["-TEST_COL-"].update(visible=True)
  • 按钮key修改为-BUTTON1-、-BUTTON2-、-BUTTON3-、-BUTTON4-

完整修正后代码

import PySimpleGUI as sg

def corecode(base):
    lines = []
    for i in range(1, 11):
        lines.append(f'{i:>2d} * {base:>2d} = {i*base:>3d}')
    return ("\n"+"-"*13+"\n").join(lines)

def test():
    showquestion = "What is 9 X 9 ? \n 1. 81 \n 2. 12 \n 3. 22 \n 4. 68 "
    return showquestion

sg.theme('LightBlue')
sg.set_options(font=("Courier New", 12))

showrobot_column = [
    [sg.Image('E:/img/Gif_robot.gif', size = (700, 700))],
    [sg.Exit()]
]
showtest_column =[
    [sg.Button('1', enable_events=True, size=(15, 10), key="-BUTTON1-")],
    [sg.Button('2', enable_events=True, size=(15, 10), key="-BUTTON2-")],
    [sg.Button('3', enable_events=True, size=(15, 10), key="-BUTTON3-")],
    [sg.Button('4', enable_events=True, size=(15, 10), key="-BUTTON4-")],
]
list_values = [f'{i+1:>2d}' for i in range(10)]
show_Textbox_selectbox = [
    [sg.Multiline(size=(15, 20), expand_y=True, key='-MULTILINE-')],
    [sg.Listbox(values=list_values, enable_events=True, size=(15, 10), key="-LISTBOX-"),sg.Button('Test Yourselves',key="-Test-")],
]

layout = [
    [sg.Column(showrobot_column),
     sg.VSeparator(),
     sg.Column(showtest_column,visible = False, key="-TEST_COL-"),
     sg.Column(show_Textbox_selectbox),],
]

window = sg.Window("First Test", layout, finalize=True)
multiline = window['-MULTILINE-']
multiline.update(value=corecode(1))
listbox = window['-LISTBOX-']
listbox.update(set_to_index=0)
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'Exit':
        break
    elif event == '-LISTBOX-':
        base = int(values[event][0])
        multiline.update(value=corecode(base))
    elif event == '-Test-':
        multiline.update(value =test())
        window['-LISTBOX-'].Update(visible = False)
        window['-TEST_COL-'].Update(visible = True)
        window['-Test-'].Update(visible = False)

window.close()

内容的提问来源于stack exchange,提问作者Toby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:27:03