【问题标题】:I want to record the user's answers in the dictionary我想在字典中记录用户的答案
【发布时间】:2021-11-08 19:12:13
【问题描述】:

我是第一次使用 Stackoverflow,我来自俄罗斯(突然之间这很重要)。我正在学习 Python 并创建一个带有用户界面的小型问答游戏。 有几个问题我解决不了:

  1. 我想创建一个 2 页的游戏。当用户点击 OK 按钮时,第一页消失,第二页出现,程序将用户的答案写入 d3 字典。如何写出用户对这本词典的答案?
  2. 我在第二页写了一个句子作为测试。但是,当我单击“确定”时,第二页完全是空的。

代码如下:

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 == "ОК":
        column2.update(visible=True)
        column1.update(visible=False)
window.close()

【问题讨论】:

  • 追加:example_list_variable.append(example_input)

标签: python pysimplegui


【解决方案1】:

这里有两个问题

  1. 如何将用户的答案写到这本词典?

用户的答案在字典values中,您可以为所有元素指定选项key,比如这里为每个输入元素指定1~7,之后,values的值是字典d3如果没有其他元素的值读入values,请尝试对d3 进行深度复制。

  1. 第二页完全是空的。

如果visible=False第1页的行没有内容,第1页的空间仍然会被占用。有两种方法可以解决这个问题。

  • 在布局中使用辅助函数sg.pin,它将在行中放置一个小元素。
layout = [
    [
        sg.pin(sg.Column(
            column1,
            scrollable=True,
            vertical_scroll_only=True,
            visible=True,
            key="column1",
            size=(1366, 768),
        ))
    ],
    [
        sg.pin(sg.Column(
            column2,
            scrollable=True,
            vertical_scroll_only=True,
            visible=False,
            key="column2",
            size=(1366, 768),
        ))
    ],
]
  • 将两个sg.Column 放入同一行
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),
        )
    ],
]

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多