#python #user-interface #tkinter
#python #пользовательский интерфейс #tkinter
Вопрос:
Я не уверен, как перенести ввод и вывод моей функции из консоли в интерфейс. Я не знаю, должен ли я выполнять функцию уничтожения и каждый раз создавать новый фрейм.
from tkinter import *
states = ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho",
"Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi",
"Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio",
"Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia",
"Washington", "West Virginia", "Wisconsin", "Wyoming"]
capitals = ["Montgomery", "Juneau", "Phoenix", "Little Rock", "Sacramento", "Denver", "Hartford", "Dover", "Tallahassee", "Atlanta", "Honolulu", "Boise",
"Springfield", "Indianapolis", "Des Moines", "Topeka", "Frankfurt", "Baton Rouge", "Augusta", "Annapolis", "Boston", "Lansing", "St. Paul", "Jackson",
"Jefferson City", "Helena", "Lincoln", "Carson City", "Concord", "Trenton", "Santa Fe", "Albany", "Raleigh", "Bismarck", "Columbus",
"Oklahoma City", "Salem", "Harrisburg", "Providence", "Columbia", "Pierre", "Nashville", "Austin", "Salt Lake City", "Montpelier", "Richmond",
"Olympia", "Charleston", "Madison", "Cheyenne"]
def geofunction():
i = 0
for element in states:
value = 1
while value == 1:
test = input(element ": ")
if test == capitals[i]:
print("You got it!")
value = 0
else:
print("Try again")
i = 1
print("Game Finished!")
root = Tk()
topFrame = Frame(root)
topFrame.pack()
bottomFrame = Frame(root)
bottomFrame.pack()
theLabel = Label(topFrame, text = "Welcome to the Geography Quizzer!nClick below to get started!")
theLabel.pack(fill=BOTH)
getstarted = Button(bottomFrame, text="Get started!", fg="black", bg="tan", command=geofunction)
getstarted.pack(fill=BOTH)
root.mainloop()
Ответ №1:
вам не нужно каждый раз уничтожать свой фрейм, вы можете его изменить. Вы можете поместить метку во фрейм тура, а затем изменить текст фрейма. Например, если вы хотите изменить свой текст theLabel
, вы можете сделать:
theLabel['text'] = 'new text'
root.update()
ad чтобы использовать ввод, я полагаю, вы предпочли бы изменить ввод на виджет ввода в графическом интерфейсе. Виджет ввода — это виджет, в котором пользователь может вводить ввод, а вы можете получить к нему доступ с помощью Entry.get() или используя переменную tkinter в качестве переменной Entry.textvariable, пример:
from tkinter import *
states = ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho",
"Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi",
"Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio",
"Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia",
"Washington", "West Virginia", "Wisconsin", "Wyoming"]
capitals = ["Montgomery", "Juneau", "Phoenix", "Little Rock", "Sacramento", "Denver", "Hartford", "Dover", "Tallahassee", "Atlanta", "Honolulu", "Boise",
"Springfield", "Indianapolis", "Des Moines", "Topeka", "Frankfurt", "Baton Rouge", "Augusta", "Annapolis", "Boston", "Lansing", "St. Paul", "Jackson",
"Jefferson City", "Helena", "Lincoln", "Carson City", "Concord", "Trenton", "Santa Fe", "Albany", "Raleigh", "Bismarck", "Columbus",
"Oklahoma City", "Salem", "Harrisburg", "Providence", "Columbia", "Pierre", "Nashville", "Austin", "Salt Lake City", "Montpelier", "Richmond",
"Olympia", "Charleston", "Madison", "Cheyenne"]
counter = 0
root = Tk()
def geofunction():
global counter
def get_answer():
global counter
if input_entry.get() == capitals[counter]:
theLabel['text'] = "You got it!"
counter = 1
input_text['text']=states[counter] ":"
else:
theLabel['text'] = "Try again"
if counter == len(states):
theLabel['text'] = "Game Finished!"
input_entry.destroy()
getstarted.pack_forget()
input_text = Label(text=states[counter] ":")
input_text.pack()
input_entry = Entry()
input_entry.pack()
Button(text='answer', command=get_answer).pack()
topFrame = Frame(root)
topFrame.pack()
bottomFrame = Frame(root)
bottomFrame.pack()
theLabel = Label(topFrame, text = "Welcome to the Geography Quizzer!nClick below to get started!")
theLabel.pack(fill=BOTH)
getstarted = Button(bottomFrame, text="Get started!", fg="black", bg="tan", command=geofunction)
getstarted.pack(fill=BOTH)
root.mainloop()