Python tkinter label скрыть

Блог

Как мне сделать фрейм LabelFrame невидимым? (Tkinter)

#python #tkinter #ttk

#python #tkinter #ttk

Вопрос:

 import tkinter as tk from tkinter import ttk window = tk.Tk() window.title('None') label = ttk.LabelFrame(window, text = 'What I want to delete') label.grid(column = 0, row = 0, padx = 5, pady = 5) text = ttk.Label(label, text = 'Hello World') text.grid(column = 0, row = 0) window.mainloop() 

Теперь меня удивляет то, что, когда я делаю следующие изменения:

 import tkinter as tk from tkinter import ttk window = tk.Tk() window.title('None') label = ttk.LabelFrame(window, text = 'What I want to delete').grid(column = 0, row = 0, padx = 5, pady=5) text = ttk.Label(label, text = 'Hello World').grid(column = 0, row = 0) window.mainloop() 

Рамка метки не отображается. Только текст. Как показано ниже:

Это означает, что LabelFrame существует, но не отображается, потому что ошибки нет. Я думаю.

Таким образом, я «решил это». Итак, мой вопрос в том, есть ли функция, которая позволяет не показывать фрейм в LabelFrame?

Комментарии:

1. помог ли вам мой ответ?

2. @FlavioMoraes Это сработало довольно хорошо. Я просто кодирую свое приложение. Спасибо. Я просто вернулся сюда, чтобы проверить информацию, которую мне нужно запомнить.

3. поэтому, пожалуйста, поддержите мое решение

4. @FlavioMoraes Моя репутация меньше 15. Извините.

5. Нет проблем, но, пожалуйста, отметьте ответ как принятый.

Ответ №1:

ttk.LabelFrames видны только в том случае, если внутри него что-то есть или если они имеют фиксированный размер. В приведенном вами примере fisrt ttl.Label виджет text=’Hello Word’ явно находится внутри LabelFrame, поскольку вы передали его в качестве родительского. Но во втором примере это не так. Вы можете подумать, что это потому, что вы также определены label как ttk.Label родительский, но если вы это сделаете print(label) , вы увидите, что он будет напечатан None , и в tkinter, если вы передадите None его как мастер виджета, он поймет, что мастер является корневым Tk() виджетом.

Итак, почему это происходит? Разница между двумя примерами заключается в том, что в первом label=ttk.LabelFrame() , который является объектом LabelFrame (экземпляром класса LabelFrame), а во втором label=ttk.LabelFrame().grid() , который является результатом метода grid, и поскольку метод grid не возвращает ничего, чему равна метка None . В заключение, что вы делаете, это помещаете LabelFrame с чем-либо внутри, а затем вторую метку, оба в ту же позицию главного окна, и именно поэтому вы не видите LabelFrame.

Хорошо, тогда как сделать LabelFrame невидимым? Лучший вариант — не использовать ttk.LabelFrame , но tk.LabelFrame потому что теперь вы можете исчезнуть с помощью границы label.configure() . Конечно, это будет выглядеть так, как будто фрейма там нет, но все внутри фрейма все равно будет видно. Если вы хотите исчезнуть с вещами внутри метки, вы можете использовать либо label.destroy() (вы не сможете восстановить метку), либо label.grid_forget() (который будет только «разгружать» метку).

Источник

В Tkinter есть ли способ сделать виджет невидимым?

grid_remove это еще один вариант. Преимущество grid_forget том, что grid запомнит все параметры, поэтому простая grid() вернет его обратно. Там нет pack_remove .

@shaktimaan: я не вижу, где говорится, что варианты запоминаются. Это может быть повторно отображено, но это может не отображаться повторно в том же месте.

@Bateman: Вы можете вернуть его, снова вызвав pack() (при условии, что вы сохранили ссылку на виджет). Это потому, что pack_forget() просто делает виджет исчезающим, но он все еще существует.

Один из вариантов, как объясняется в другом ответе, заключается в использовании pack_forget или grid_forget . Другой вариант — использовать lift и lower . Это изменяет порядок укладки виджетов. Чистый эффект заключается в том, что вы можете скрывать виджеты за видными видениями сестры (или потомками братьев и сестер). Когда вы хотите, чтобы они были видны вами, lift их, и когда вы хотите, чтобы они были невидимыми, вы lower их.

Преимущество (или недостаток. ) состоит в том, что они все еще занимают место у своего хозяина. Если вы «забудете» виджет, другие виджеты могут перенастроить их размер или ориентацию, но если вы их поднимете или опустите, они не будут.

import Tkinter as tk class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.frame = tk.Frame(self) self.frame.pack(side="top", fill="both", expand=True) self.label = tk.Label(self, text="Hello, world") button1 = tk.Button(self, text="Click to hide label", command=self.hide_label) button2 = tk.Button(self, text="Click to show label", command=self.show_label) self.label.pack(in_=self.frame) button1.pack(in_=self.frame) button2.pack(in_=self.frame) def show_label(self, event=None): self.label.lift(self.frame) def hide_label(self, event=None): self.label.lower(self.frame) if __name__ == "__main__": app = SampleApp() app.mainloop() 

Я могу ошибаться, но я не думаю, что это работает в Python / Tkinter. Судя по тому, что вы используете метод lift() raise() , который является зарезервированным словом Python (на самом деле оно называется lift() ), я не думаю, что вы используете Python / Tkinter.

@AndyL: Я довольно часто пользуюсь tkinter (около 2011 года), и у меня 15-летний опыт работы с tk, что очень хорошо. Честно говоря, я думаю, что вы ошибаетесь из-за того, что это решение не работает, но мне бы очень хотелось услышать ваше мнение. Почему вы говорите, что не думаете, что это работает? Вам известен случай, когда это так, или вы догадались? Спасибо, кстати, за напоминание о подъеме против повышения. Иногда я забываю, что tkinter должен отклоняться от нативного API-интерфейса tk, чтобы соответствовать синтаксису python, и lift — это одна из команд, которые мне очень редко нужны. Я обновил свой ответ.

Перечитав мой комментарий, я хотел бы сказать, что я определенно не хотел быть таким оскорбительным, как озвучивал. Мои извенения. Я сделал свой первый комментарий, потому что я пробовал ваше решение раньше и не смог заставить его работать на меня. Я получал TclError всякий раз, когда пытался опустить виджет за его родителем. Это вполне может быть ошибкой с моей стороны. Не могли бы вы предоставить код, чтобы просветить меня?

@AndyL: моя ошибка. Оглядываясь назад, я вижу, что неправильно сформулировал решение. Вы правы, что не можете скрыть виджет за его родителем, но вы можете скрыть его за другими виджетами. Я обновил свой ответ и включил пример. Спасибо, что обратили на это мое внимание.

+1 за прекрасный пример, как справиться с недоразумениями 😉 Приятно видеть, что на земле все еще остаются вежливые и разумные люди

Я знаю, что это на пару лет поздно, но это третий ответ Google для «Tkinter hide Label» от 10/27/13. Итак, если кто-то вроде меня несколько недель назад строит простой GUI и просто хочет, чтобы какой-то текст появлялся без замены его для другого виджета с помощью методов «ниже» или «поднять», я хотел бы предложить обходной путь, который я использую (Python2.7, Windows):

from Tkinter import * class Top(Toplevel): def __init__(self, parent, title = "How to Cheat and Hide Text"): Toplevel.__init__(self,parent) parent.geometry("250x250+100+150") if title: self.title(title) parent.withdraw() self.parent = parent self.result = None dialog = Frame(self) self.initial_focus = self.dialog(dialog) dialog.pack() def dialog(self,parent): self.parent = parent self.L1 = Label(parent,text = "Hello, World!",state = DISABLED, disabledforeground = parent.cget('bg')) self.L1.pack() self.B1 = Button(parent, text = "Are You Alive. ", command = self.hello) self.B1.pack() def hello(self): self.L1['state']="normal" if __name__ == '__main__': root=Tk() ds = Top(root) root.mainloop() 

Идея здесь заключается в том, что вы можете установить цвет текста DISABLED в фоновом режиме (‘bg’) родителя, используя «.cget(‘bg’)» http://effbot.org/tkinterbook/widget.htm, что делает его «невидимым». Обратный вызов кнопки сбрасывает метку на цвет переднего плана по умолчанию, и текст снова отображается.

Недостатки здесь в том, что вам все равно нужно выделить пространство для текста, даже если вы не можете его прочитать, и, по крайней мере, на моем компьютере текст не идеально сочетается с фоном. Возможно, с некоторой настройкой цвет может быть лучше, и для компактных графических интерфейсов пустое пространство не должно быть слишком сложным для короткой рекламы.

Смотрите Цвет окна по умолчанию Tkinter и шестнадцатеричные цветовые коды для получения информации о том, как я узнал о материалах цвета.

Источник

How To Show/Hide a Label in Tkinter After Pressing a Button

How To Show-Hide a Label in Tkinter After Pressing a Button

I n this tutorial, we are going to see how to show/hide a label in Tkinter after pressing a button in Python. For this we will use the pack_forget() method.

If we want to hide a widget from the screen or top level, the forget() method is used. There are two types of methods forget_pack() (similar to forget()) and forget_grid() which are used with pack() and grid() methods respectively.

How To Show/Hide a Label in Tkinter After Pressing a Button
import tkinter as tk root = tk.Tk() root.geometry('200x150') btn1 = tk.Button(root, text='Show', command=lambda: label.pack()) btn1.pack(pady=20) btn2 = tk.Button(root, text='Hide', command=lambda: label.pack_forget()) btn2.pack() label = tk.Label(root, text = "Welcome to StackHowTo!") label.pack() root.mainloop()

mcq

MCQ Practice competitive and technical Multiple Choice Questions and Answers (MCQs) with simple and logical explanations to prepare for tests and interviews. Read More

  • Button Tkinter | Python 3
  • Label Tkinter | Python 3
  • Text Tkinter | Python 3
  • Entry Tkinter | Python 3
  • Message Tkinter | Python 3
  • Checkbutton Tkinter | Python 3
  • Radiobutton Tkinter | Python 3
  • Menu Tkinter | Python 3
  • Menubutton Tkinter | Python 3
  • Frame Tkinter | Python 3
  • Scrollbar Tkinter | Python 3
  • Spinbox Tkinter | Python 3
  • Listbox Tkinter | Python 3
  • Canvas Tkinter | Python 3
  • tkMessageBox Tkinter | Python 3
  • LabelFrame Tkinter | Python 3
  • Scale Tkinter | Python 3
  • Toplevel Tkinter | Python 3
  • PanedWindow Tkinter | Python 3
  • pack() Method in Tkinter Python 3
  • grid() Method in Tkinter Python 3
  • place() Method in Tkinter Python 3
  • How to Get Window Size in Tkinter Python
  • How to Set Default Tkinter Entry Value in Python
  • How to Change the Default Icon on a Tkinter Window
  • How to Bind The Enter key to a Function in Tkinter
  • How to Clear Text From a Text Widget on Click in Tkinter
  • How to Set The Width and Height of a Tkinter Entry
  • How to Get the Input From the Tkinter Text Widget
  • How to Make Tkinter Text Widget Read Only
  • How to Increase Font Size in Text Widget in Tkinter
  • How to Get the Tkinter Label Text
  • How To Show/Hide a Label in Tkinter After Pressing a Button
  • How to Delete Tkinter Button After Click
  • How to Change Label Text on Button Click in Tkinter
  • How to Change the Font Size in a Label in Tkinter Python
  • How to Make a Timer in Python Tkinter
  • How To Display a Tkinter Window in Fullscreen
  • How to Stop a Tkinter Window From Resizing
  • How to Open a New Window With a Button in Python Tkinter
  • How to Disable/Enable Tkinter Button in Python
  • How to Close a Tkinter Window With a Button
  • How to Pass Arguments to Tkinter button’s callback Command?
  • How to Bind Multiple Commands to Tkinter Button
  • How to Change Background Color of the Window in Tkinter Python
  • How to Change Background Color of a Tkinter Button in Python
  • How to Change Text of Button When Clicked in Tkinter Python
  • How to change font and size of buttons in Tkinter Python
  • How to Set Tkinter Window Size – Python
  • How To Add Image To Button In Python Tkinter

How to Delete Tkinter Button After Click

  • How to Delete Tkinter Button After Click
  • How to Get the Tkinter Label Text

Источник

How to show and hide widgets in Tkinter?

Tkinter is a Python library which is used to create and develop GUI-based applications.Let us suppose that we have to create an application such that we can show or hide the widgets.

  • In order to display/show the widget, use pack() geometry manager
  • To hide any widget from the application, use pack_forget() method.

Example

Let us take this example to understand how to show/hide widgets −

# Import the required libraries from tkinter import * from tkinter import ttk # Create an instance of tkinter frame win = Tk() # Set the size of the tkinter window win.geometry("700x350") # Define the style for combobox widget style = ttk.Style() style.theme_use('xpnative') # Define a function to show/hide widget def show_widget(): label.pack() def hide_widget(): label.pack_forget() b1.configure(text="Show", command=show_widget) # Add a label widget label = ttk.Label(win, text="Eat, Sleep, Code and Repeat", font=('Aerial 11')) label.pack(pady=30) # Add a Button widget b1 = ttk.Button(win, text="Hide", command=hide_widget) b1.pack(pady=20) win.mainloop()

Output

Running the above code will open a window that will have a Button to show/hide the widgets from the application.

Now, click the button to display/hide the label text from the window.

Источник

Читайте также:  Datetime python get current time
Оцените статью