Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 22, 2017 23:09:38

gambrinas13
Зарегистрирован: 2017-06-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Взаимодействие условных конструкций и стандартного фреймворка(tkinter)

Ребята нужна помощь. Имеется следующий код:

 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()
Выдает следующую ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File “E:\Python\lib\tkinter\__init__.py”, line 1399, in __call__
return self.func(*args)
File “F:\number.py”, line 33, in reveal
elif guess > number:
TypeError: unorderable types: Text() > int().

Cама суть ошибки мне ясна, вопрос следующий: существует ли способ изменить тип получаемых данных с Text() на int(). Если же код в целом корявый и небрежный укажите, как правильно связать условный блок с графическим эффектом.Заранее благодарю.

Отредактировано gambrinas13 (Июнь 22, 2017 23:17:58)

Офлайн

#2 Июнь 23, 2017 00:43:19

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Взаимодействие условных конструкций и стандартного фреймворка(tkinter)

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)
нужно сместить влево чтобы он не был в блоке else:



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Июнь 23, 2017 00:59:54

gambrinas13
Зарегистрирован: 2017-06-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Взаимодействие условных конструкций и стандартного фреймворка(tkinter)

Благодарю за помощь. Конечный вариант у меня получился следующий:

 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()

Офлайн

#4 Июнь 23, 2017 02:18:20

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Взаимодействие условных конструкций и стандартного фреймворка(tkinter)

зачем три раза писать одно и тоже?

         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)

self.guess_ent = Entry(self) вообще непонятно зачем



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#5 Июнь 23, 2017 09:16:57

gambrinas13
Зарегистрирован: 2017-06-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Взаимодействие условных конструкций и стандартного фреймворка(tkinter)

PEHDOM
зачем три раза писать одно и тоже?
Программа работала так же, но в вашем варианте результат такой же, спасибо вам еще раз.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version