Как отобразить графическое сообщение, указывающее, какие кнопки и радиокнопка были выбраны в tkinter в Python? - PullRequest
0 голосов
/ 15 февраля 2019

Я новичок в Python и программировании в целом.Я бездельничаю в tkinter, пытаясь сделать глупую и простую программу, чтобы мне было легче с ней работать

То, что я делаю с моей программой, спрашивает имя пользователя, возраст, помнят ли они определенные события и чувствуют ли они себя старыми или нет.Как я уже сказал, это должна быть легкомысленная программа, просто чтобы проверить мои навыки.

Теперь мне интересно, как отобразить GUI-сообщение, указывающее, какие кнопки-флажки и радио-кнопка были выбраны в tkinter в Python?

Вот код и скриншот.Я добавлю снимок экрана с результатами, но могу заставить имя и возраст работать так, как должно, но не могу правильно отобразить сообщение в графическом интерфейсе с флажками или переключателем.

from tkinter import *

class MyFrame(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.geometry("600x400")
        self.master.title("How to tell if you're old")
        self.event = NONE
        self.old = NONE
        self.grid()

    #user name and age
        self.prompt = Label(self, text="What's your name?")
        self.prompt.grid(row=0, column=0, pady=5)

        self.input_name = Entry(self)
        self.input_name.grid(row=0, column=1, pady=5)

        self.prompt = Label(self, text="How old are you?")
        self.prompt.grid(row=2, column=0, pady=5)

        self.input_age = Entry(self)
        self.input_age.grid(row=2, column=1, pady=10)

    #user asks user if they remember certain events
        self.prompt = Label(self, text="Which of these events do"
                                   "you remember (may select more than one)?")
        self.prompt.grid(row=3, columnspan=5, pady=5)

        self.wheel_event = IntVar()
        self.check_wheel_event = Checkbutton(self, text="Invention of the wheel",
                                         variable=self.wheel_event, command=self.set_response_event)
        self.check_wheel_event.grid(row=4, column=0, padx=5)

        self.firstFlight_event = IntVar()
        self.check_firstFlight_event = Checkbutton(self, text="First flight",
                                               variable=self.firstFlight_event, command=self.set_response_event)
        self.check_firstFlight_event.grid(row=4, column=1, padx=5)

        self.Berlin_Wall_event = IntVar()
        self.check_Berlin_Wall_event = Checkbutton(self, text="Berlin Wall",
                                               variable=self.Berlin_Wall_event, command=self.set_response_event)
        self.check_Berlin_Wall_event.grid(row=4, column=2, padx=5)

        self.millennium_event = IntVar()
        self.check_millennium_event = Checkbutton(self, text="Millennium",
                                              variable=self.millennium_event, command=self.set_response_event)
        self.check_millennium_event.grid(row=4, column=3, padx=5)

    #user answers if they think they're old and if they want to know how
        # old they'll be in 10, 15, or 20 years
        self.prompt = Label(self, text="Do you consider yourself old?")
        self.prompt.grid(row=5, column=0, pady=5)

        self.feel_old = IntVar()
        self.feel_old.set(4)

        self.not_sure_old = Radiobutton(self, text="Not sure",
                                    variable=self.feel_old, value="0")
        self.not_sure_old.grid(row=6, column=0)

        self.no_old = Radiobutton(self, text="No",
                              variable=self.feel_old, value="1")
        self.no_old.grid(row=6, column=1)

        self.yes_old = Radiobutton(self, text="Yes",
                               variable=self.feel_old, value="2")
        self.yes_old.grid(row=6, column=2)

    #submit button
        self.button_submit = Button(self, text='Submit',
                                command=self.submit_click)
        self.button_submit.grid
        self.button_submit.grid(row=9, column=3, padx=10)

        self.my_name = StringVar()
        self.message = Label(self, textvariable=self.my_name)
        self.message.grid(columnspan=2, pady=10)

        self.my_age = StringVar()
        self.message = Label(self, textvariable=self.my_age)
        self.message.grid(columnspan=2, pady=10)

    #response
    def set_response_event(self):
        #remembering events
        if self.wheel_event.get() == 1:
            self.event = "wheel"
        elif self.firstFlight_event.get() == 1:
            self.event = "firstFlight"
        elif self.Berlin_Wall_event.get() == 1:
            self.event = "Berlin_Wall"
        elif self.millennium_event.get() == 1:
            self.event = "millennium"

    def set_response_old(self):
        #feeling old
        if self.not_sure_old.get() == "0":
            self.old = "not_sure_old"
        elif self.no_old.get() == "1":
            self.old = "no_old"
        elif self.yes_old.get() == "2":
            self.old = "yes_old"

    def submit_click(self):
        output_message = 'Well ' + self.input_name.get() + ', to begin with you are ' + self.input_age.get() + '.\n'
        output_message += 'You remember the ' + self.event +'.\n'
        output_message += 'This means you are ' + self.old + '.'

        self.my_name.set(output_message)

frame05 = MyFrame()
frame05.mainloop()

Вот что я получаю: enter image description here

Я понимаю, что, вероятно, делаю это нелегко, но чувствую, что я действительно близко.Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Чтобы получить все значения флажков для вывода, сделайте атрибут self.event списком

def __init__self():
    ...
    ...
    self.event=[]

, а когда вы вызываете функцию set_response_event, добавьте эти строковые значения в этот список.

def set_response_event(self):
    #remembering events
    if self.wheel_event.get() == 1:
        self.event.append("wheel")
    elif self.firstFlight_event.get() == 1:
        self.event.append("firstFlight")
    elif self.Berlin_Wall_event.get() == 1:
        self.event.append("Berlin_Wall")
    elif self.millennium_event.get() == 1:
        self.event.append("millennium")

Наконец, распечатайте список, используя функцию .join

'You remember the ' + ', '.join(self.event) + '\n'
0 голосов
/ 15 февраля 2019

Во-первых, вы никогда не звоните set_response_old(self), что я могу сказать.Во-вторых, вы пытаетесь сравнить строки с целыми числами, которые не попадают в ваши операторы if.Попробуйте переписать две последние функции, например, так:

    def set_response_old(self):
        #feeling old
        if self.feel_old.get() == 0:
            self.old = "not sure old"
        elif self.feel_old.get() == 1:
            self.old = "no old"
        elif self.feel_old.get() == 2:
            self.old = "yes old"

    def submit_click(self):
        self.set_response_old()
        output_message = 'Well ' + self.input_name.get() + ', to begin with you are ' + self.input_age.get() + '.\n'
        output_message += 'You remember the ' + self.event + '.\n'
        output_message += 'This means you are ' + self.old + '.'
        self.my_name.set(output_message)

Когда я запускаю эту команду, она выдает

Это означает, что вы - старый.

КакойЯ думаю, что - это то, что вы искали.

@ EDIT

Что касается получения списка запомненных событий для показа ... Вы можетедобавьте self.events_remembered = [] в раздел __init__, чтобы создать место для хранения данных (это не обязательно должно быть в разделе инициализации, так как приведенный ниже код сделает это в любом случае, но это хорошая практика!), а затем измените свой set_responseфункция как таковая:

    def set_response_event(self):
    #remembering events
    self.events_remembered = [] # reset each time we are determining pressed events (so we don't just keep adding duplicates, and also remove any unchecked boxes)
    if self.wheel_event.get() == 1:
        self.events_remembered.append("wheel")
    if self.firstFlight_event.get() == 1:
        self.events_remembered.append("firstFlight")
    if self.Berlin_Wall_event.get() == 1:
        self.events_remembered.append("Berlin Wall")
    if self.millennium_event.get() == 1:
        self.events_remembered.append("millennium")

Вы правы, полагая, что if будет перехватывать только первое, но нет правила против наличия серии if операторов, как показано!

Наконец, вы можете обновить функцию submit_click для поиска этой информации и отображения отформатированного списка

def submit_click(self):
    self.set_response_old()
    self.set_response_event() # use the function we just updated
    print(self.events_remembered)
    output_message = 'Well ' + self.input_name.get() + ', to begin with you are ' + self.input_age.get() + '.\n'
    output_message += 'You remember the ' + ", ".join(self.events_remembered) + '.\n'
    output_message += 'This means you are ' + self.old + '.'
    self.my_name.set(output_message)

Здесь мы используем ", ".join(iterable_list), чтобы преобразовать наш список Python в красивую запятую, разделеннуюсписок вместо!

Если это решит ваш вопрос, я был бы признателен, если бы вы могли принять ответ, нажав на флажок рядом с сообщением!Если вы действительно так же, как я, вы можете нажать, чтобы проголосовать за меня тоже XD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...