Я новичок, и у меня настоящая проблема с включением «GUESS my number game» в GUI. Это вызов из «программирования на Python для абсолютный новичок », и нет никаких решений, содержащихся в книге ?!Угадайте мою игру номер и GUI = stumped :(
Я могу получить единственную догадку и запустить ее через цикл while, но после этого я в недоумении. Я потратил много времени на различные вещи и прибыли на ничего, что работает. Я, наверное, далеко трек.
Я хочу, чтобы иметь возможность получить дополнительные предположения от пользователя, но как в GUI?
Спасибо , Дэйв (усталым и деморализованы)
My code:
# Guess my number game
# User must attempt to guess randomly selected number within a range in fewest possible attempts
from Tkinter import *
import random
class Application(Frame):
"""A GUI application which which generates random number and gets user input"""
def __init__(self, master): #initialize newly created Application object
"""Initialize the frame"""
Frame.__init__(self, master) # super(Application, self).__init__(master) in python 3
self.grid()
self.create_widgets()
def create_widgets(self):
"""Get user inputs"""
# create instruction label
Label(self, text = "I'm thinking of a number between 1 and 100.").grid(row = 0, column = 0, sticky = W)
Label(self, text = "Try and guess it in as few attempts as possible!").grid(row = 1, column = 0, sticky = W)
# create guess input prompt label and entry
Label(self, text = "Take a guess:").grid(row = 2, column = 0, sticky = W)
self.guess_ent = Entry(self)
self.guess_ent.grid(row = 2, column = 1, sticky = W)
# create start game prompt label and submit button
Label(self, text = "Press submit to start the game!").grid(row = 3, column = 0, sticky = W)
Button(self, text = "Submit", command = self.run_game).grid(row = 3, column = 1, sticky = W)
# create submit button
#Button(self, text = "Submit", command =)
# create computer feedback text box
self.text = Text(self, width = 75, height = 10, wrap = WORD)
self.text.grid(row = 4, column = 0, columnspan = 4)
def run_game(self):
"""Generate number and get user input"""
guess = int(self.guess_ent.get())
number = random.randint(1, 101)
while guess and guess != number:
print_text = ""
print_text += "You guessed "
print_text += str(guess)
print_text += "."
if guess > number:
print_text += " That's too high. Guess lower..."
elif guess < number:
print_text += " That's too low. Guess higher..."
self.text.delete(0.0, END)
self.text.insert(0.0, print_text)
self.guess_ent.delete(0, END)
#print_text = ""
#print_text += "That's the right number! Well done!"
#self.text.delete(0.0, END)
#self.text.insert(0.0, print_text)
# main
root = Tk()
root.title("Guess my number game!")
app = Application(root)
root.mainloop()
Вообще говоря, TkInter приложения не должны иметь 'while' петли, которые ждут виджет для изменения состояния, потому что окно не будет перерисовывать или отвечать на ввод данных пользователем, если вы часто не возвращает управление основной цикл, позволяя вашей функции конец. Здесь нет реального «быстрого исправления»; вам нужно разработать свою программу, используя парадигму stateful/responsive, а не стиль «падающего камня» консольных программ. – Kevin
Хорошо. Спасибо, это хорошо знать. Я задержу цикл while и посмотрю, что я могу придумать. –