- Tkinter не может даже вызвать простую «кнопку»
- 2 ответа
- Tkinter обработка нажатий на кнопку
- Структура приложения и работа с кнопкам / tkinter 1
- Структурирование приложения Tkinter
- Простой пример
- Правильный пример
- Как работает это приложение?
- Дополнение о структуре приложения
- Работа с кнопками
- Как создать кнопку
- Tkinter ничего не показывает
- Решение
- Обработка событий и настройка окна / tkinter 4
- Обработка событий с мыши и клавиатуры
- Как работает отслеживание событий
- Настройка иконки, названия и размера основного окна
Tkinter не может даже вызвать простую «кнопку»
Начав с простых уроков Tkinter, я застрял в том случае, если даже этот простой код не работает:
И не могу найти причину, учитывая, что этот код взят из официальная документация.
Я пытался обновить tk из conda: conda install -c anaconda tk , но ничего не изменилось. Не могу понять, почему.
2 ответа
Единственный способ воспроизвести вашу ошибку — это создать код непосредственно в оболочке IDLE и закрыть всплывающее корневое окно перед созданием кнопки.
Тем не менее, очень странно писать GUI в командной консоли. Если вы не закрываете окно tkinter, код работает нормально. Однако разработку GUI следует выполнять в редакторе в файле .py и запускать все сразу. Простое решение состоит в том, чтобы не закрывать корневое окно, пока все остальное в графическом интерфейсе не было добавлено.
Правильное решение состоит в том, чтобы создать графический интерфейс в файле .py и затем запустить его.
Я не уверен, почему вы говорите, что редактор не работает для вас. Когда я копирую ваш точный код, он отлично работает на моем конце:
Все это говорит о том, что вам действительно не нужно создавать свой код в Python IDLE. Было бы намного лучше использовать что-то вроде PyCharm или Eclipse / PyDev. Это мои инструменты Go to IDE.
Следует обратить внимание на то, что Python IDLE не будет запускать код из редактора, пока вы не сохраните файл .py .
Хотя для Python IDLE не требуется 100%, mainloop() является требованием для правильной работы tkinter. За пределами Python IDLE большинство других сред IDE требуют mainloop() , поэтому рекомендуется всегда включать его.
Источник
Tkinter обработка нажатий на кнопку
Добрый день, хотелось бы узнать, как можно сделать неактивной кнопку после 5 нажатий на нее?
И второй вопрос — почему при создании новой кнопки buttom1 в buttom1.bind если поменять значение «Button-1» на «Button-2», кнопка не работает?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Обработка нажатий на сам фрагмент а не на отдельную кнопку
Как повесить обработку нажатий на весь фрагмент а не на отдельное View внутри фрагмента? .
Переместить кнопку по углам формы и посчитать количество нажатий на кнопку
помогите, пожалуйста, переместить кнопку по углам формы и посчитать количество нажатий на кнопку в.
Ограничение нажатий на кнопку
Как сделать что бы на кнопку можно было нажать только один раз в день? в программе уже есть.
Счётчик нажатий на кнопку
Вообщем по идеи должен считать нажатия и выводить их в label1, считает в итоге только 1 нажатие.
ТабуретY, спасибо. Еще вопрос.
Как изменить положение объекта text в Tkinter? И как достать введенный пользователем туда текст при нажатии на кнопку?
Количество нажатий на кнопку
Доброго времени суток. Задача такая, есть допустим кнопка, при нажатие на нее обновляется время.
Вообщем решил сделать счётчик нажатия кнопок без ajax и js. Есть бд — statistic. C полями id.
подсчет нажатий на кнопку
Суть в кратце такова: Есть задание — сделать форму с кнопкой, да так, что-бы при нажатии на нее.
Можно ли создать программу, которая бы при первом нажатии на кнопку выполняла одни действия, а при.
Источник
Структура приложения и работа с кнопкам / tkinter 1
Структурирование приложения Tkinter
Одно из главных преимуществ создания приложения с Tkinter в том, что с его помощью очень просто настроить интерфейс всего в несколько строк. И если программа становится сложнее, то и сложнее логически разделять ее на части, а организованная структура помогает сохранять код в чистом виде.
Простой пример
Возьмем в качестве примера следующую программу:
Она создает окно с кнопкой, которая выводит Привет, Tkinter! каждый раз при нажатии. Кнопка расположена с внутренним отступом 120px по горизонтальной оси и 30px – по вертикальной. Последняя строка запускает основной цикл, который обрабатывает все пользовательские события и обновляет интерфейс до закрытия основного окна.
Программу можно запустить, чтобы убедиться, что она работает. Все переменные определяются в глобальном пространстве имен, и чем больше виджетов добавляется, тем сложнее разобраться в том, какие части они используют.
Wildcard-импорты ( from … import * ) считаются плохой практикой, поскольку они загрязняют глобальное пространство имен. Здесь они используются для иллюстрации анти-паттерна, который часто встречается в примерах онлайн.
Эти проблемы настройки решаются с помощью базовых техник объектно-ориентированного программирования, что считается хорошей практикой для любых типов программ на Python.
Правильный пример
Чтобы улучшить модуль простой программы, стоит определить несколько классов, которые станут обертками вокруг глобальных переменных:
Теперь каждая переменная хранится в конкретной области видимости, включая функцию command , которая находится в отдельном методе.
Как работает это приложение?
Во-первых нужно заменить wildcard-импорт на импорт в формате import … as для лучшего контроля над глобальным пространством имен.
Затем класс App определяется как подкласс Tk , который теперь ссылается на пространство имен tk . Для правильной инициализации базового класса, вызывается метод __init__() класса Tk с помощью встроенной функции super() . За это отвечают следующие строки:
Теперь есть ссылка на экземпляр App с переменной self . Так что виджет кнопки будет добавлен как атрибут класса.
Это может казаться излишним для такой простой программы, но подобный рефакторинг помогает работать с каждой отдельной частью. Создание кнопки отделено от обратного вызова, которые исполняется при нажатии. А генерация приложения перемещена в if __name__ == «main» , что является стандартной практикой для исполняемых скриптов в Python.
Такой же принцип будет использовать в примерах и дальше, поэтому его можно взять как шаблон-стартовая точка для крупных приложений.
Дополнение о структуре приложения
Класс Tk вынесен в отдельный класс в примере, но распространенной практикой считается выделять так же другие классы виджетов. Это делается для воссоздания тех же инструкций, которые были до рефакторинга.
Однако может быть более удобно разделять классы Frame или Toplevel особенно для больших программ, где, например, есть несколько окон. Это все потому что у приложения Tkinter должен быть один экземпляр Tk , а система создает их автоматически при создании экземпляра виджета до создания экземпляра самого Tk .
Помните, что это не влияет на структуру класса App , поскольку у всех классов виджетов есть метод mainloop , который запускает основной цикл Tk .
Работа с кнопками
Виджеты кнопок представляют собой кликабельные элементы графического интерфейса приложений. Они обычно используют текст или изображение, указывающие на то, какое действие будет выполнено при нажатии. Tkinter позволяет легко настраивать их функциональность с помощью стандартных настроек класса виджета Button .
Как создать кнопку
Следующий блок содержит кнопку с изображением, которая выключается при нажатии, а также список кнопок с разными типами анимации после нажатия:
Цель программы — показать разные варианты настройки, которые могут быть использованы при создании виджета кнопки.
После выполнения кода выше, возвращается следующее:
Простейший способ создания экземпляра Button — использование параметра text для настройки метки кнопки и command , который ссылается на вызываемую функцию при нажатии кнопки.
В этом примере также добавляется PhotoImage с помощью параметра image , который имеет приоритет над строкой text . Этот параметр используется для объединения изображения и текста на одной кнопке, определяя местоположение, где будет находиться картинка. Он принимает следующие константы: CENTER, BOTTOM, LEFT, RIGHT и TOP.
Второй ряд кнопок создается с помощью сгенерированного списка и списка значений RELIEF . Метка каждой кнопки соответствует константе, так что можно заметить разницу во внешнем виде.
Для сохранения ссылки на экземпляр PhotoImage использовался атрибут, хотя его и нет вне метода __init__ . Причина в том, что изображения удаляются при сборке мусора. Это и происходит, если объявить их в качестве локальных переменных.
Для избежания этого нужно помнить о сохранении ссылки на каждый объект PhotoImage до тех пор, пока окно, где он показывается, не закрыто.
Следующий урок: Работа с текстом (в разработке)
Источник
Tkinter ничего не показывает
tkinter только начал изучать, мало чего в нём знаю, но когда я запустил программу, вместо окошка с текстом «нажми меня» ничего не появилось, и программа просто закончила работу.
Что делать?
Добавлено через 4 минуты
Если что я использую PyCharm
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Tkinter не показывает картинку
Подскажите, пожалуйста, почему вот эта программа не показывает картинку: from tkinter import *.
Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter?
Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter? Я пишу.
1) Проблема с виджетом Scale (ползунок) модуля tkinter. Я создал ползунок от 1 до 50 (как на первой.
ПК включается , ни ничего не показывает
Проблема началась еще с лета не мог с 1ого раза включить комп , он сам перезагружался и так до.
Решение
Запустить tkinter
в конце добавить
Вьюшка ничего не показывает
Всем привет. Помогите понять почему вьюшка ничего не показывает. Есть след. код. Модель using.
Ipconfig \all ничего не показывает
Добрый день, столкнулся с проблемой что не могу подключится по RDP к серверу.Подключился через.
Монитор ничего не показывает
компьютер нормально работает а монитор ничего не показывает помогите.
Компьютер включается, но ничего не показывает
Дело в том что компьютер после нажатия кнопки «ВКЛ» не показывает вообще ничего т.е. все кулера.
Источник
Обработка событий и настройка окна / tkinter 4
Обработка событий с мыши и клавиатуры
Возможность реагировать на события — одна из базовых, но важных тем в приложениях с графическим интерфейсом. Именно она определяет, как пользователи смогут взаимодействовать с программой.
Нажимание клавиш на клавиатуре и клики по элементам мышью — базовые примеры событий, все из которых автоматически обрабатываются в некоторых классах Tkinter. Например, это поведение уже реализовано в параметре command класса виджета Button , который вызывает определенную функцию.
Некоторые события можно вызвать и без участия пользователя. Например, фокус ввода можно сместить с одного виджета на другой.
Выполнить привязку события к виджету можно с помощью метода bind . Следующий пример привязывает некоторые события мыши к экземпляру Frame :
Все события обрабатываются методом класса print_event() , который выводит тип события и положение мыши в консоли. Можете поэкспериментировать, нажимая на зеленую рамку мышью и двигая ею, пока она будет выводить сообщения события.
Следующий пример содержит виджет поля ввода и несколько привязок. Одна из них срабатывает в тот момент, когда фокус оказывается в виджете, а вторая — при нажатии кнопки:
В первую очередь программа выведет сообщение события FocusIn . Это произойдет в тот момент, когда фокус окажется в виджете Entry. Можно убедиться также в том, что события срабатывают и в случае с непечатаемыми символами, такими как клавиши стрелок или Backspace.
Как работает отслеживание событий
Метод bind определен в классе widget и принимает три аргумента: событие sequence , функцию callback и опциональную строку add :
Строка sequence использует синтаксис .
Модификаторы являются опциональными и позволяют задать дополнительные комбинации для общего типа события:
- Shift – когда пользователь нажимает клавишу Shift.
- Alt – когда пользователь нажимает клавишу Alt.
- Control – когда пользователь нажимает клавишу Control.
- Lock – когда пользователь нажимает клавишу Lock.
- Shift – когда пользователь нажимает клавишу Shift.
- Shift – когда пользователь нажимает клавишу Shift lock.
- Double – когда событие происходит дважды подряд.
- Triple – когда событие происходит трижды подряд.
Типы события определяют общий тип события:
- ButtonPress или Button – события, которые генерируются при нажатии кнопки мыши.
- ButtonRelease – событие, когда кнопка мыши отпускается.
- Enter – событие при перемещении мыши на виджет.
- Leave – событие, когда мышь покидает область виджета.
- FocusIn – событие, когда фокус ввода попадает в виджет.
- FocusOut – событие, когда виджет теряет фокус ввода.
- KeyPress или Key – событие для нажатия кнопки.
- KeyRelease – событие для отпущенной кнопки.
- Motion – событие при перемещении мыши.
detail – также опциональный параметр, который отвечает за определение конкретной клавиши или кнопки:
- Для событий мыши 1 — это левая кнопка, 2 — средняя, а 3 — правая
- Для событий клавиатуры используются сами клавиши. Если это специальные клавиши, то используется специальный символ: enter, Tab, Esc, up, down, right, left, Backspace и функциональные клавиши (от F1 до F12).
Функция callback принимает параметр события. Для событий мыши это следующие атрибуты:
- x и y – текущее положение мыши в пикселях
- x_root и y_root — то же, что и x или y, но относительно верхнего левого угла экрана
- num – номер кнопки мыши
Для клавиш клавиатуры это следующие атрибуты:
- char – нажатая клавиша в виде строки
- keysym – символ нажатой клавиши
- keycode – код нажатой клавиши
В обоих случаях у события есть атрибут widget , ссылающийся на экземпляр, который сгенерировал событие и type , определяющий тип события.
Рекомендуется определять метод для функции callback , поскольку всегда будет иметься ссылка на экземпляр класса, и таким образом можно будет легко получить доступ к атрибутам widget .
Наконец, параметр add может быть пустым ( «» ) для замены функции callback , если до этого была привязка или + для добавления функции обратного вызова и сохранения старых.
Помимо описанных типов событий есть и другие, которые оказываются полезными в определенных сценариях: например, генерируется при уничтожении виджета, а — при изменении размера или положения.
Полный список событий доступен в документации Tcl/Tk.
Настройка иконки, названия и размера основного окна
Экземпляр Tk отличается от обычных виджетов тем, как он настраивается. Рассмотрим основные методы, которые позволяют настраивать внешний вид.
Этот кусок кода создает основное окно с заданными названием и иконкой. Его ширина — 400 пикселей, а высота — 200. Плюс, есть разделение в 10px по каждой оси к левому верхнему углу экрана.
Источник