Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Не работает программа на python  (Прочитано 869 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Darth_Biscuit

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Не работает программа на python
« : 08 Мая 2015, 17:45:33 »
from tkinter import *
import random

def act(event):
    print(c)

root = Tk()
lbl0 = Label(root,text='From',width=10,height=3)
ent0 = Entry(root,width=20)
lbl1 = Label(root,text='To',width=5,height=3)
ent1 = Entry(root,width=20)
btn = Button(root,text='Generate',width=20,height=3)
btn.bind('<Button-1>',act)

a = IntVar()
b = IntVar()
a.set(ent0.get())
b.set(ent1.get())
c = IntVar()
c.set(random.randint(a, b))

lbl0.pack()
ent0.pack()
lbl1.pack()
ent1.pack()
btn.pack()

root.mainloop()

Выдаёт:

Traceback (most recent call last):
  File "E:\Ïðî÷åå\Programms\Window#1.py", line 20, in <module>
    c.set(random.randint(a, b))
  File "C:\Python34\lib\random.py", line 218, in randint
    return self.randrange(a, b+1)
TypeError: unsupported operand type(s) for +: 'IntVar' and 'int'

Что не так?

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5583
  • Все по палатам!
    • Просмотр профиля
Re: Не работает программа на python
« Ответ #1 : 08 Мая 2015, 18:10:11 »
Питона не знаю, но как бы намекают, что в random.py
return self.randrange(a, b+1)
b и 1 - разных типов, которые не суммируются
Извините, я все еще учусь

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Не работает программа на python
« Ответ #2 : 08 Мая 2015, 22:18:36 »
IntVar() - это виджет (на сколько я понял? в tk я плохо разбираюсь). Что бы получить из него значение - нужно вызвать метод get().

т.е. вызывать надо как-то типа
Код: (python) [Выделить]
random.randint(a.get(), b.get())
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Darth_Biscuit

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Не работает программа на python
« Ответ #3 : 09 Мая 2015, 12:23:36 »
IntVar() - это виджет (на сколько я понял? в tk я плохо разбираюсь). Что бы получить из него значение - нужно вызвать метод get().

т.е. вызывать надо как-то типа
Код: (python) [Выделить]
random.randint(a.get(), b.get())

Нет, IntVar()-это переменная. Заменил random.randint(a, b) на random.randint(a.get(), b.get()), получилось:

Traceback (most recent call last):
  File "/home/alexandr/Документы/Window#1.py", line 20, in <module>
    c.set(random.randint(a.get(), b.get()))
  File "/usr/lib/python3.4/tkinter/__init__.py", line 314, in get
    return getint(self._tk.globalgetvar(self._name))
ValueError: invalid literal for int() with base 10: ''

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Не работает программа на python
« Ответ #4 : 09 Мая 2015, 15:08:08 »
Любая-фигня() - это не переменная. Это - вызов функции. Что она вернет - нужно читать в руководстве.
А в мануале написано, что чтобы получить значение нежно пользовать get() , а для установки значения set(). Так что вы не правы.
« Последнее редактирование: 09 Мая 2015, 15:12:59 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 630
    • Просмотр профиля
Re: Не работает программа на python
« Ответ #5 : 10 Мая 2015, 18:34:05 »
Не знаю, как исправить, но:
Код: (Python) [Выделить]
# 'a' и 'b' - создаются переменные типа <'instance'> для хранения целых чисел.
# Значение по умолчанию - 0.

a = IntVar()
b = IntVar()
a.set(целое_число) служит для установки значения переменной 'a'. В качестве аргумента ожидается целое число.
Тем не менее, ent0.get() возвращает строку <'str'>, причем пустую. Поэтому:
Код: (Python) [Выделить]
a.set(ent0.get())
равняется
Код: (Python) [Выделить]
a.set('')
Что, собственно, и вызывает ошибку.
Например, если
Код: (Python) [Выделить]

a.set(ent0.get())
b.set(ent1.get())
заменить на
Код: (Python) [Выделить]
a.set(0)
b.set(1)
и, естественно, генерация случайных чисел должна тоже выглядеть так
Код: (Python) [Выделить]
c.set(random.randint(a.get(), b.get()))
то уже появляется какое-то окно, где можно ввести числа, и после нажатия на кнопку в консоли выводится результат, правда, в виде PY_VAR2, с чем тоже еще нужно разобраться.
Linux is only free if your time has no value (c) Jamie Zawinski

 

Страница сгенерирована за 0.036 секунд. Запросов: 25.