Форум сайта python.su
Ребята нужна помощь. Имеется следующий код:
from tkinter import * class Application(Frame): def __init__(self,master): super(Application,self).__init__(master) self.grid() self.create_widgets() def create_widgets(self): Label(self, text ="Добро пожаловать в игру 'Отгадай число'!" ).grid(row = 0,column = 0,sticky = W) Label(self, text = "Загадано число от 1 до 100" ).grid(row = 1,column = 0,sticky = W) Label(self, text = "Ваше предположение:" ).grid(row = 2,column = 0,sticky = W) self.guess_ent = Entry(self) self.guess_ent = Text(self,width = 3,height = 1,wrap = WORD) self.guess_ent.grid(row = 2,column = 1,sticky = W) self.submit_bttn = Button(self, text ="Ок", command = self.reveal) self.submit_bttn.grid(row = 2,column = 2,sticky = W) self.number = Text(self,width = 35, height = 5, wrap = WORD) self.number.grid(row = 4, column = 0, sticky = W) def reveal(self): import random number = random.randint(1,100) guess = self.guess_ent if guess == number: message = "Вы угадали!" elif guess > number: message = "Меньше" elif guess < number: message = "Больше" else: message = "Вы не угадали!" self.number.delete(0.0,END) self.number.insert(0.0,message) root = Tk() root.title("Отгдай число") root.geometry("300x100") app = Application(root) root.mainloop()
Отредактировано gambrinas13 (Июнь 22, 2017 23:17:58)
Офлайн
Entry всегда текст возвращает, вам нужно преобразовать его в число
guess = int(self.guess_ent.get())
НО для этого нужно чтобы guess_ent был таки Entry а у вас он сначала Entry , потом Text. Text тоже текст возвращает, но там нужно еще индексы указывать..
guess = int(self.guess_ent.get(0.0))
вы уж определитесь както с типом self.guess_ent
Теперь по поводку кода:
метод create_widgets лишний, он у вас всего раз вызывается, все что в нем написано можно поместить в __init__.
number каждый раз генерируется заново при нажатии кнопки “ОК”. Вы уверены что это прпвильный алгоритм?
Кейс
else: message = "Вы не угадали!"
self.number.delete(0.0,END) self.number.insert(0.0,message)
[code python][/code]
Офлайн
Благодарю за помощь. Конечный вариант у меня получился следующий:
from tkinter import * import random number = random.randint(1,10) class Application(Frame): def __init__(self,master): super(Application,self).__init__(master) self.grid() Label(self, text ="Добро пожаловать в игру 'Отгадай число'!" ).grid(row = 0,column = 0,sticky = W) Label(self, text = "Загадано число от 1 до 10" ).grid(row = 1,column = 0,sticky = W) Label(self, text = "Ваше предположение:" ).grid(row = 2,column = 0,sticky = W) self.guess_ent = Entry(self) self.guess_ent = Text(self,width = 3,height = 1) self.guess_ent.grid(row = 2,column = 1,sticky = W) self.submit_bttn = Button(self, text ="Ок", command = self.reveal) self.submit_bttn.grid(row = 2,column = 2,sticky = W) self.number = Text(self,width = 35, height = 5, wrap = WORD) self.number.grid(row = 4, column = 0, sticky = W) def reveal(self): guess = int(self.guess_ent.get(0.0)) if guess == number: message = "Вы угадали" self.number.delete(0.0,END) self.number.insert(0.0,message) elif guess > number: message = "Меньше" self.number.delete(0.0,END) self.number.insert(0.0,message) elif guess < number: message = "Больше" self.number.delete(0.0,END) self.number.insert(0.0,message) root = Tk() root.title("Отгдай число") root.geometry("300x100") app = Application(root) root.mainloop()
Офлайн
зачем три раза писать одно и тоже?
if guess == number: message = "Вы угадали" self.number.delete(0.0,END) self.number.insert(0.0,message) elif guess > number: message = "Меньше" self.number.delete(0.0,END) self.number.insert(0.0,message) elif guess < number: message = "Больше" self.number.delete(0.0,END) self.number.insert(0.0,message)
if guess == number: message = "Вы угадали" elif guess > number: message = "Меньше" elif guess < number: message = "Больше" self.number.delete(0.0,END) self.number.insert(0.0,message)
[code python][/code]
Офлайн
PEHDOMПрограмма работала так же, но в вашем варианте результат такой же, спасибо вам еще раз.
зачем три раза писать одно и тоже?
Офлайн