Python PySimpleGUI双页问答游戏答案存储与页面显示问题求解
问题修复方案
第二页空白问题修复
空白原因是你将两个页面容器放在了上下两个独立的布局行中,第一个容器高度设置为768px,隐藏后位于第二行的第二页容器被挤出了窗口可视区域。
修改方案:将两个容器放在同一布局行堆叠显示,调整layout代码如下:
layout = [ [ sg.Column( column1, scrollable=True, vertical_scroll_only=True, visible=True, key="column1", size=(1366, 768), ), sg.Column( column2, scrollable=True, vertical_scroll_only=True, visible=False, key="column2", size=(1366, 768), ) ], ]
答案写入d3字典功能实现
PySimpleGUI的window.read()返回的values变量按输入控件的创建顺序存储了所有用户输入内容,你可以按题目顺序对应取值写入d3。在OK按钮的触发逻辑中添加写入代码即可:
elif event == "ОК": # 按题目顺序写入用户答案到d3 d3[1] = values[0] # 第1题输入框 d3[2] = values[1] # 第2题多行输入框 d3[3] = values[2] # 第3题输入框 d3[4] = values[3] # 第4题输入框 d3[5] = values[4] # 第5题输入框 d3[6] = values[5] # 第6题输入框 d3[7] = values[6] # 第7题多行输入框 # 可选:如果需要对比正确答案,可添加数字类型转换逻辑 # for num in [1,3,5,6]: # try: # d3[num] = int(d3[num].strip()) # except: # pass column2.update(visible=True) column1.update(visible=False)
完整可运行代码
import PySimpleGUI as sg d = { 1: "1. Когда мы познакомились?\n 1) 4 июля\n 2) 20 июля\n 3) 12 июля\n 4) 13 июля", 2: "2. Чего я боюсь больше всего в жизни?", 3: "3. Какой цвет я больше всего предпочитаю?\n 1) розовый\n 2) чёрный\n 3) голубой\n 4) зелёный", 4: "4. Моё тотемное животное?", 5: "5. Какая марка автомобилей мне нравится?\n 1) Audi\n 2) Lamborghini\n 3) Tesla\n 4) Nissan", 6: "6. Мой любимый фрукт летом?\n 1) ананас\n 2) слива\n 3) персик\n 4) инжир", 7: "7. Я верующий – в кого я верю?(это учёный-физик)", } # 题库 d2 = { 1: 3, 2: "Клоунов", 3: 3, 4: "лиса", 5: 3, 6: 3, 7: "Исаак Ньютон - английский физик, математик, механик и астроном, один из создателей классической физики. Автор фундаментального труда «Математические начала натуральной философии», в котором он изложил закон всемирного тяготения и три закона механики, ставшие основой классической механики.", } # 正确答案 d3 = {} # 用户答案存储字典 font = ("Times New Roman", 14) sz1 = (30, 3) sz2 = (110, 3) sg.set_options(font=font) sg.theme("DarkAmber") column1 = [ [sg.Text("Здравствуйте. Сейчас вы пройдёте небольшую викторину.")], [sg.Text(d[1]), sg.InputText()], [sg.Text(d[2], size=(sz1)), sg.Multiline(size=(sz2))], [sg.Text(d[3]), sg.InputText()], [sg.Text(d[4]), sg.InputText()], [sg.Text(d[5]), sg.InputText()], [sg.Text(d[6]), sg.InputText()], [sg.Text(d[7], size=(sz1)), sg.Multiline(size=(sz2))], [sg.Button("ОК"), sg.Button("Выйти")], ] # 第一页布局 column2 = [ [sg.Text("А теперь сравним твои ответы с теми, что подготовил я:", size=(30, 3))], [sg.Button("Выйти")], ] # 第二页布局 layout = [ [ sg.Column( column1, scrollable=True, vertical_scroll_only=True, visible=True, key="column1", size=(1366, 768), ), sg.Column( column2, scrollable=True, vertical_scroll_only=True, visible=False, key="column2", size=(1366, 768), ) ], ] window = sg.Window("Приветик", layout, finalize=True) window.Maximize() column1, column2 = window["column1"], window["column2"] while True: event, values = window.read() if event in (sg.WIN_CLOSED, "Выйти"): break elif event == "ОК": # 写入用户答案 d3[1] = values[0] d3[2] = values[1] d3[3] = values[2] d3[4] = values[3] d3[5] = values[4] d3[6] = values[5] d3[7] = values[6] # 切换页面 column2.update(visible=True) column1.update(visible=False) window.close()
内容的提问来源于stack exchange,提问作者RizeD
相关产品推荐
相关产品推荐

