Отображение виджетов в tkinter: скрыть и вернуть обратно
Мне нужно завершать функцию и удалять объекты button и Label после начала выполнения другой функции.Вот эта функция:
def child(): btn = Button(root, text="Подтвердить", background="#708090",padx="20", pady="8", font="16") o = Entry(root) def sum_back(): if int(o.get())
Далее идет другая функция. Так вот , мне нужно, что бы после нажатия на n ную кнопку функция "скрывала" кнопки и лейблы. А после повторного вызывания функции снова "возвращала".
Отслеживать
52.2k 11 11 золотых знаков 108 108 серебряных знаков 311 311 бронзовых знаков
задан 1 мар 2018 в 8:25
Камень Булыжникович Камень Булыжникович
23 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
связанный вопрос How to delete Tkinter widgets from a window?
1 мар 2018 в 17:27
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Можно при помощи компоновщика .grid() добавлять объект и временно удалять при помощи .grid_remove()
Пример:
import tkinter def func(): label_visible_false.grid() button_visible_false.grid() label_visible_true.grid_remove() button_visible_true.grid_remove() def visible_true(): label_visible_false.grid_remove() button_visible_false.grid_remove() label_visible_true.grid() button_visible_true.grid() root = tkinter.Tk() root.geometry("400x400") label_visible_true = tkinter.Label(root, text='Не скрытый текст') label_visible_true.grid() button_visible_true = tkinter.Button(root, text='Не скрытая кнопка', command=func) button_visible_true.grid() label_visible_false = tkinter.Label(root, text='Скрытый текст') button_visible_false = tkinter.Button(root, text='Скрытая кнопка', command=visible_true) root.mainloop()
Так же это можно сделать с pack() при помощи функции pack_forget() Пример c pack() :
import tkinter def func(): label_visible_false.pack() button_visible_false.pack() label_visible_true.pack_forget() button_visible_true.pack_forget() def visible_true(): label_visible_false.pack_forget() button_visible_false.pack_forget() label_visible_true.pack() button_visible_true.pack() root = tkinter.Tk() root.geometry("400x400") label_visible_true = tkinter.Label(root, text='Не скрытый текст') label_visible_true.pack() button_visible_true = tkinter.Button(root, text='Не скрытая кнопка', command=func) button_visible_true.pack() label_visible_false = tkinter.Label(root, text='Скрытый текст') button_visible_false = tkinter.Button(root, text='Скрытая кнопка', command=visible_true) root.mainloop()
Так же можно и с place() при помощи того же place_forget()
import tkinter def func(): label_visible_false.place(x=0, y=50) button_visible_false.place(x=0, y=100) label_visible_true.place_forget() button_visible_true.place_forget() def visible_true(): label_visible_false.place_forget() button_visible_false.place_forget() label_visible_true.place(x=0, y=50) button_visible_true.place(x=0, y=100) root = tkinter.Tk() root.geometry("400x400") label_visible_true = tkinter.Label(root, text='Не скрытый текст') label_visible_true.place(x=0, y=50) button_visible_true = tkinter.Button(root, text='Не скрытая кнопка', command=func) button_visible_true.place(x=0, y=100) label_visible_false = tkinter.Label(root, text='Скрытый текст') button_visible_false = tkinter.Button(root, text='Скрытая кнопка', command=visible_true) root.mainloop()
Как скрыть кнопку в tkinter
Для удаления применяется метод delete() , который в качестве параметра принимает идентификатор удаляемого элемента.
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) def remove_button(): canvas.delete(btnId) btn = ttk.Button(text="Click", command=remove_button) btnId = canvas.create_window(10, 20, anchor=NW, window=btn, width=100, height=50) root.mainloop()
Здесь по нажатию на кнопку удаляется сама кнопка. В качестве аргумента в метод delete() передается идентификатор, который мы получаем при добавлении кнопки.
Управление координатами
Для получения/изменения координат элеимента применяется метод coords() :
# получение координат coords(__tagOrId: str | _CanvasItemId, /) -> list[float] # изменение координат coords(__tagOrId: str | _CanvasItemId, __args: list[int] | list[float] | tuple[float, . ], /) -> None coords(__tagOrId: str | _CanvasItemId, __x1: float, __y1: float, *args: float) -> None
Первая версия возвращает координаты в виде списка значений для элемента с определенным идентификатором.
Вторая и третья версии изменяют позицию, получая в качестве второго/третьего параметра(ов) новые координаты.
Например, динамически изменим координаты:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x250") y = 0 direction = -10 btn_height = 40 canvas_height = 200 canvas = Canvas(bg="white", width=250, height=canvas_height) canvas.pack(anchor=CENTER, expand=1) def cliked_button(): global y, direction if y >= canvas_height - btn_height or yЗдесь по нажатию на кнопку к координате y добавляется +-10. Когда кнопка достигает границ Canvas, то изменяем знак приращения на противоположный, и таким образом, кнопка изменяет направление движения.
Изменение параметров элемента
Для изменения параметров элемента на Canvas применяется метод itemconfigure() . В качестве обязательного параметра он принимает идентифкатор изменяемого элемента, а второй параметр - набор устанавливаемых параметров:
itemconfigure: (tagOrId: str | _CanvasItemId, cnf: dict[str, Any] | None = . **kw: Any)Например, изменим цвет линии:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x250") red = "red" blue= "blue" selected_color = StringVar(value=red) canvas = Canvas(bg="white", width=250, height=150) canvas.pack(anchor=CENTER, expand=1) def select(): canvas.itemconfigure(line, fill=selected_color.get()) red_btn = ttk.Radiobutton(text=red, value=red, variable=selected_color, command=select, padding=6) red_btn.pack(anchor=NW) blue_btn = ttk.Radiobutton(text=blue, value=blue, variable=selected_color, command=select, padding=6) blue_btn.pack(anchor=NW) line = canvas.create_line(10, 10, 200, 100, fill=selected_color.get()) root.mainloop()В данном случае в окне определены два переключателя Radiobutton. Они привязаны к переменной selected_color, которая хранит выбранный цвет - "red" или "blue".
На canvas нарисована линия. При нажатии на один из переключателей изменяем цвет линии:
Убрать кнопки Свернуть Развернуть Закрыть на форме
Убрать кнопки закрыть/развернуть/свернуть на сцене JavaFX
Начал освоение JavaFX и не смог найти в интернете способа убрать со сцены(Pane).Убрать у MDiChild кнопки свернуть и развернуть оставить только Закрыть.
Подскажите каким образом можно реализовать что уMdiChild было только кнопка Закрыть? Какие можете.кнопки закрыть, свернуть, развернуть
Возникла нужда убрать эти кнопки(те которыми сворачивают, разворачивают и закрывают окна) или.Как убрать рамку (свернуть, развернуть, закрыть)
Как убрать рамку (свернуть, развернуть, закрыть) Но так, чтобы можно было перемещать окно по.Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
Ципихович Эндрю, Tk().overrideredirect(True)
1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,319
спс за ответ, так:root = tk.Tk() Tk().overrideredirect(True) # убрать на форме кнопки Свернуть Развернуть Закрытьпока ошибка
name 'Tk' is not definedДобавлено через 39 минут
1 2 3 4root.resizable(0, 0) # делает неактивной кнопку Развернуть root.attributes('-toolwindow', True) # удаляет кнопки Свернуть Развернуть, удаляет Иконку root.attributes('-disabled', True) # блокирует кнопки Свернуть Развернуть Закрыть, при их нажатии раздаётся звук root.attributes('-fullscreen', True) # делает во весь экран, кнопки Свернуть Развернуть Закрыть отсутствуют87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Отсутствуют кнопки развернуть свернуть закрыть QT
Проект перекочевал с Linux qt под Windows, поле где должны быть указанные кнопки есть, а самих.
Кнопки окна (свернуть, развернуть и закрыть)
Всем привет! Помогите с VBA. Пытался найти сам, но нашел только закрыть базу, и закрыть форму.Кнопки и окна: передвинуть, свернуть, развернуть, закрыть.
как передвинуть кнопки свернуть, развернуть, закрыть на несколько пикселов влево, и как в.
Пропали кнопки в заголовке окон (свернуть развернуть закрыть)
Пропали вот эти кнопки, после перезагрузки. Как чинить? Тема стоит стандартнаяКрасивая шапка Windows окна, и кнопки закрыть, свернуть, развернуть
Добрый день! Подскажите, можно ли что то сделать со стандартной шапкой Windows окна, и кнопками.Убрать из заголовка окна кнопки "свернуть", "развернуть", "закрыть"
У класса Window есть кнопки сворачивание, раскрытие во весь экран и закрытие, так вот мне надо.Виджеты Button, Label, Entry
В этом уроке рассмотрим подробнее три наиболее простых и часто используемых виджета GUI – кнопку, метку и однострочное текстовое поле. В tkinter объекты этих элементов интерфейса порождаются соответственно от классов Button , Label и Entry .
Свойства и методы виджетов бывают относительно общими, характерными для многих типов, а также частными, зачастую встречающимися только у какого-то одного класса. В любом случае список настраиваемых свойств велик. В этом курсе мы будем рассматривать только ключевые свойства и методы классов пакета tkinter .
В Tkinter существует три способа конфигурирования свойств виджетов:
- в момент создания объекта,
- с помощью метода config , он же configure ,
- путем обращения к свойству как к элементу словаря.
Button – кнопка
Самыми важными свойствами виджета класса Button являются text , с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку.
По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Единицами измерения в данном случае являются знакоместа (количество символов).
Такие свойства как bg , fg , activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия и установки курсора мыши над кнопкой.
from tkinter import * def change(): b1['text'] = "Изменено" b1['bg'] = '#000000' b1['fg'] = '#ffffff' b1['activebackground'] = '#555555' b1['activeforeground'] = '#ffffff' root = Tk() b1 = Button(text="Изменить", width=15, height=3) b1.config(command=change) b1.pack() root.mainloop()
Здесь значение свойства command устанавливается с помощью метода config . Однако можно было сделать и так: b1['command'] = change . Вот так будет выглядеть кнопка после запуска программы и после нажатия на нее:
Label – метка
Виджет Label просто отображает текст в окне и служит в основном для информационных целей (вывод сообщений, подпись других элементов интерфейса). Свойства метки во многом схожи с таковыми у кнопки. Однако у меток нет опции command . Поэтому связать их с событием можно только с помощью метода bind .
На примере объекта типа Label рассмотрим свойство font – шрифт.
from tkinter import * root = Tk() l1 = Label(text="Машинное обучение", font="Arial 32") l2 = Label(text="Распознавание образов", font=("Comic Sans MS", 24, "bold")) l1.config(bd=20, bg='#ffaaaa') l2.config(bd=20, bg='#aaffff') l1.pack() l2.pack() root.mainloop()
Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.
Также как font свойство bd есть не только у метки. С его помощью регулируется размер границ. Здесь единицей измерения является пиксель.
Бывает, что метки и кнопки не присваивают переменным, если потом к ним в коде не приходится обращаться. Их создают от класса и сразу размещают:
from tkinter import * def take(): lab['text'] = "Выдано" root = Tk() Label(text="Пункт выдачи").pack() Button(text="Взять", command=take).pack() lab = Label(width=10, height=1) lab.pack() root.mainloop()
В данном примере только у одной метки есть связь с переменной, так как одно из ее свойств может быть изменено в процессе выполнения программы.
Entry – однострочное текстовое поле
Текстовые поля предназначены для ввода информации пользователем. Однако нередко также для вывода, если предполагается, что текст из них будет скопирован. Текстовые поля как элементы графического интерфейса бывают однострочными и многострочными. В tkinter вторым соответствует класс Text , который будет рассмотрен позже.
Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get . В текстовое поле можно вставить текст методом insert . Также можно удалить текст методом delete .
Метод insert принимает позицию, в которую надо вставлять текст, и сам текст. Такой код
from tkinter import * from datetime import datetime as dt def insert_time(): t = dt.now().time() e1.insert(0, t.strftime('%H:%M:%S ')) root = Tk() e1 = Entry(width=50) but = Button(text="Время", command=insert_time) e1.pack() but.pack() root.mainloop()
приведет к тому, что после каждого нажатия на кнопку будет вставляться новое время перед уже существующей в поле строкой.
Если 0 в insert заменить на константу END , то вставляться будет в конец. Можно указать любое число-индекс знакоместа, тогда вставка будет производиться куда-либо в середину строки.
Метод delete принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END .
Практическая работа
Напишите программу, состоящую из семи кнопок, цвета которых соответствуют цветам радуги. При нажатии на ту или иную кнопку в текстовое поле должен вставляться код цвета, а в метку – название цвета.
Коды цветов в шестнадцатеричной кодировке: #ff0000 – красный, #ff7d00 – оранжевый, #ffff00 – желтый, #00ff00 – зеленый, #007dff – голубой, #0000ff – синий, #7d00ff – фиолетовый.
Примерно должно получиться так:
Для выравнивания строки по центру в текстовом поле используется свойство justify со значением CENTER .
Курс с примерами решений практических работ: pdf-версия
X Скрыть Наверх
Tkinter. Программирование GUI на Python