Процедура есть в тексте программы но не срабатывает в чем может быть причина

Изучаю графический интерфейс, решил написать небольшую программу (не особо важно, что она должна была делать), но столкнулся с вот такой вот проблемой.
Функция check срабатывает при запуске программы, но не вызывается при нажатии кнопки, которая как раз-таки должна была её вызывать. Не могу понять в чём проблема.
Заранее, спасибо.

Текст программы:

from tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() self.answer1 = Button( frame, text=»2″, command=self.check(2) ) self.answer1.pack() self.lable = Label( master, text=»’Сколько будет 2+2? Пожалуйста, введите ответ(только цифры)»’, bg=»black», fg=»white» ) self.lable.pack() self.button = Button( frame, text=»Выход», command=frame.quit ) self.button.pack() def check(self, x=int): if x != 4: print(«Ответ «, x, » неверен») else: print(«Верно») root = Tk() root.geometry(‘600×420’) app = App(root) root.mainloop()

  • Вопрос задан более трёх лет назад
  • 68 просмотров

Комментировать
Решения вопроса 1

NeiroNx

ВСЕ решения! Не открываются ФОТОГРАФИИ на Windows 10 (не работает стандартное приложение «ФОТО»)

Программист

потому что там должно быть имя функции а у вас ее вызов.
Имя это self.check
а вызов это self.check(2)
вот он и вызывается при создании кнопки а так как она ничего не возвращает то None присваивается команнде — нажатие на кнопку с command=None ничего не делает.
Вы захотите узнать как исправить:
можно использовать однострочную(lambda) функцию

self.answer1 = Button( frame, text=»2″, command=lambda: self.check(2) )

lambda: self.check(2) — вернет указатель на функцию которая вызовет self.check с аргументом 2 при своем вызове без каких либо аргументов и вернет результат self.check(2) если он был бы нужен.

Источник: qna.habr.com

Урок 26
§34. Вспомогательные алгоритмы

1. Какие задачи легче решаются с использованием вспомогательных алгоритмов?

2. Можно ли использовать процедуры, если в программе нет повторяющихся действий? Зачем это может быть нужно?

Читайте также:
Символ который необходимо ввести перед формулой в программе excel

3. В каких ситуациях вы бы не рекомендовали использовать вспомогательные алгоритмы?

4. Что произойдёт, если исполнитель не обнаружит расшифровки новой команды?

5. Процедура есть в тексте программы, но не срабатывает. В чём может быть причина?

6. Куда передаётся управление, если процедура вызывается в самом конце основной программы (за ним нет других команд)?

7. Выполните по указанию учителя задания в рабочей тетради.

Следующая страница Практическая работа № 23 «Вспомогательные алгоритмы»

Cкачать материалы урока

Как сбросить все настройки клавиатуры на компьютере

Источник: xn—-7sbbfb7a7aej.xn--p1ai

Процедура есть в тексте программы но не срабатывает в чем может быть причина

она должна проверить условие(длина введенного в комбобокс текста >0, и введенный текст не встречается в строке str), и вслучае выполнения этих условий добавить этот текст в список комбобокса, и добавить в строку str.
В список комбобокса текст добавляется, а в строку почему то нет.
вызываю так

add_managers(ComboBox4, managers);
Пользователь
Регистрация: 05.12.2012
Сообщений: 63

а, нет, срабатывает оказывается.

Но как то странно. Если внутри этой процедуры делать showmessage(str), то видно что конкатенация сработала. Если же после процедуры делать showmessage(managers), то строка осталась той же

Последний раз редактировалось marwell.; 25.02.2013 в 19:48 . Причина: новые данные
personality
Регистрация: 28.04.2009
Сообщений: 2,865

procedure TForm1.add_managers(cbx: TComboBox; var str:string);

Изучаем способы передачи параметров в подпрограммы. Со строками ещё хитрость, что может поменяться указатель на неё из-за copy-on-demand

Форумчанин
Регистрация: 11.10.2007
Сообщений: 384
Доброго времени суток!
можете и так:

var str:string procedure TForm1.add_managers(cbx: TComboBox); 🙂 var name_m: string; begin name_m:=cbx.Text; if (name_m<>») and (Pos(name_m, str)=0) then begin str:=str+’,’+name_m; cbx.Items.Add(name_m); end; end; str:=managers; add_managers(ComboBox4);

Читайте также:
Установка программы на компьютер называется

По другому подпрограммка для себя пишет str!
str у вас больше не где не видна!
С уважением,
Volkogriz!

Не количеством плюсов измеряется репутация человека.
Последний раз редактировалось Volkogriz; 26.02.2013 в 03:21 .

Источник: www.programmersforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru