Временно заменить весь графический интерфейс на кнопку? - PullRequest
0 голосов
/ 15 января 2019

Как сделать так, чтобы tkinter Button временно полностью заполнил весь графический интерфейс, а затем после нажатия указанной кнопки вернитесь в предыдущее состояние.

Я попытался установить кнопку на свой «самый высокий уровень» фрейм и с помощью настроек конфигурации развернуть и заполнить, это сделало Button довольно большим, но в итоге оно заполнило только 1/3 моего графического интерфейса.

... other instantiations...

#Initialization of button in gui as whole
toggleBacklightButton = Button(patternOptionFrame,text="Screen Light",
                               font=('calibri',(10)),relief="raised",
                               command=toggleBacklight)
toggleBacklightButton.grid(row=0,column=3)

... other code...

#Function that the button press calls.
def toggleBacklight():
    global backlight_toggle
    backlight_toggle = not backlight_toggle
    if backlight_toggle is True:
        # Button should be as it was when instantiated AND back light
        # is on / all other ~20 widgets are also where they belong.
        os.system(
            "sudo sh -c 'echo \"0\" > /sys/class/backlight/rpi_backlight/bl_power'")
    else:
        # Button should fill entire screen for ease of access when
        # screen is black / all other ~20 widgets are hidden.
        os.system(
            "sudo sh -c 'echo \"1\" > /sys/class/backlight/rpi_backlight/bl_power'")

... other functions...

Кнопка переключает отображение на моем сенсорном экране, однако я не знаю, как заставить его занимать весь экран, когда подсветка экрана выключена.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Если вы хотите использовать перекрывающиеся виджеты, то постройте все внутри фрейма и поместите кнопку в то же место сетки фрейма.

Примерно так:

import tkinter as tk


root = tk.Tk()

def action():
    btn.destroy()

root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

frame = tk.Frame(root)
frame.grid(row=0, column=0, sticky="nsew")
tk.Label(frame, text="some random label").pack()

btn = tk.Button(root, text="Some big button", command=action)
btn.grid(row=0, column=0, sticky="nsew")

root.mainloop()
0 голосов
/ 15 января 2019

Tkinter, как правило, вообще не позволяет виджетам перекрываться - увеличение вашей кнопки просто отталкивает другие виджеты, они фактически никогда не закроют их. В крайне редком случае, когда вы do хотите перекрытия, это может сделать только менеджер геометрии .place(). Сделайте вашу кнопку прямым потомком самого окна и выполните:

toggleBacklightButton.place(x=0, y=0, relwidth=1.0, relheight=1.0)

чтобы оно заняло окно, затем:

toggleBacklightButton.place_forget()

чтобы избавиться от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...