Удалить кнопку минимизации в окне tkinter «root»

#python #tkinter

Вопрос:

Я пытаюсь обратиться transient к Tk() примеру. Пример:

 import tkinter as tk


root = tk.Tk()
root.geometry('200x200')

def create_new_window():
    win=tk.Toplevel()
    win.transient(root)
    win.geometry('200x200')
    tk.Label(win,text=' Hello World ').pack()

label1 = tk.Label(root, text='Click the button')
label1.pack()

b1=tk.Button(root,text='New Window',command=create_new_window)
b1.pack()
root.mainloop()
 

Этот код удалит кнопки и. - Но это будет сделано только для tk.Toplevel() :
Окно слева в root окне, а то, что справа, находится tk.Toplevel()

введите описание изображения здесь

Но есть ли какой-либо способ удалить кнопки и - в корневом окне?
Когда я это сделаю:

 ....
label1 = tk.Label(root, text='Click the button')
label1.pack()

root.transient(root)

b1=tk.Button(root,text='New Window',command=create_new_window)
b1.pack()
...
 

Я получаю сообщение об ошибке:

 Traceback (most recent call last):
  File "c:/Users/91996/Documents/Visual studio code/cd.py", line 15, in <module>
    root.transient(root)
  File "C:Program FilesPython3.8.6libtkinter__init__.py", line 2233, in wm_transient
    return self.tk.call('wm', 'transient', self._w, master)
_tkinter.TclError: can't make "." its own master
 

Я знаю, что мог бы просто сделать root.resizable(0, 0) или root.withdraw() после этого. Но я изучаю tkinter и хотел бы увидеть реализацию root.transient()

Если чего-то очевидного не хватает, пожалуйста, будьте нежны.

Заранее большое спасибо!

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

1. Tk Объект является родителем, в то время Toplevel как объект является дочерним. Попытка сделать родителя transient должна привести к такой ошибке. _tkinter.TclError: can't make "." its own master

2. Я думаю, что только Toplevel окна могут быть transient . Вы не можете использовать его для Tk() Windows.

Ответ №1:

Это код:

 import tkinter as tk


root = tk.Tk()
root.geometry('200x200')

def create_new_window():
    win=tk.Toplevel()
    win.attributes('-toolwindow',True)
    win.geometry('200x200')
    tk.Label(win,text=' Hello World ').pack()

label1 = tk.Label(root, text='Click the button')
label1.pack()

b1=tk.Button(root,text='New Window',command=create_new_window)
b1.pack()
root.mainloop()
 

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

1. Эй, там, в квартале! Твой код помог мне. Мне просто нужно было расположиться root.attributes('-toolwindow',True) вне функции для root . И это сработало! Только дизайн немного странный, но все в порядке

Ответ №2:

Вот довольно стандартная реализация родительского и временного дочернего виджета.

Дочерние виджеты всегда находятся перед родительскими. Если родитель обозначен ( parent.withdraw ), то и ребенок тоже, но ребенок может быть отозван или деиконифицирован, не затрагивая родителя с помощью child.withdraw и child.deiconify .

Вы можете создать множество дочерних виджетов для каждого родителя.

 import tkinter as tk

# Create parent
parent = tk.Tk()
parent.title("Parent")
parent.geometry("400x400")

# give tkinter time to create and position parent
parent.update()

# get parent position and size
x, y = parent.winfo_x(), parent.winfo_y()
w, h = parent.winfo_width()   5, parent.winfo_height()

# Create child
child = tk.Toplevel(parent)
child.title("Child")

# make child invisible 
child.withdraw()

# make child the child of parent
child.transient(parent)

# set size and position of child
child.geometry(f"200x300 {x w} {y}")

# give tkinter time to create and position child
child.update()

# make child visible
child.deiconify()

parent.mainloop()