Несколько кадров с помощью tkinter - как заставить их работать в полноэкранном режиме - PullRequest
0 голосов
/ 18 сентября 2018

Я написал код, используя tkinter для переключения между кадрами через несколько секунд.Проблема в том, что все приложение должно работать в полноэкранном режиме.

Вот код.

from tkinter import *


N_TRIALS = 3
COUNT=-2
N_INTERVALS = 2*N_TRIALS + 1
RELAXING_TIME = 2000
RESTING_TIME = 2000
TASKING_TIME = 2000
start_btn_state = False

def raise_frame(frame):
    frame.tkraise()
    global COUNT
    COUNT+=1
    print(COUNT)

    if (frame == f3 and COUNT==N_INTERVALS):
        frame.after(RESTING_TIME,lambda:raise_frame(f5)) 
    elif(frame == f5):
        frame.after(RELAXING_TIME,lambda:raise_frame(f6)) 
    elif frame == f2: 
                frame.after(RELAXING_TIME, lambda:raise_frame(f3)) 
    elif frame == f3: 
                frame.after(RESTING_TIME, lambda:raise_frame(f4))
    elif frame == f4: 
                 frame.after(TASKING_TIME, lambda:raise_frame(f3))
    elif frame==f6:
        root.destroy()           


def finish():
    root.destroy()

def start():
    start_btn_state=True
    raise_frame(f2)


root = Tk()

f1 = Frame(root)
f2 = Frame(root)
f3 = Frame(root)
f4 = Frame(root)
f5 = Frame(root)
f6 = Frame(root)

for frame in (f1, f2, f3, f4, f5,f6):
   frame.grid(row = 0, column = 0, sticky='nsew')

lb0=Label(f1, text="blablabla",font=("Arial Bold",10))
lb0.pack(padx = 10, pady=10)
lb1=Label(f1, text="blablabla",font = ("Arial Bold",10),fg = "black")
lb1.pack(padx = 10, pady=10)
lb2 = Label(f1, text="blablabla",font = ("Arial Bold",10),fg = "green")
lb2.pack(padx = 10, pady=10)
lb3 = Label(f1, text="blablabla",font = ("Arial Bold",10),fg = "blue") 
lb3.pack(padx = 10, pady=10)
lb4 = Label(f1, text="blablabla",font = ("Arial Bold",10),fg = "red")
lb4.pack(padx = 10, pady=10)

start_value=BooleanVar()
btn_start=Button(f1, text="Start",font = ("Arial Bold",20), command = start)
btn_start.pack(padx=10,pady=30)

close_value=BooleanVar()
btn_close=Button(f1, text="CLOSE",font = ("Arial Bold",20), command=finish)
btn_close.pack(padx=10,pady=30)

Label(f2, text='ACTION 1').pack()
#Button(f2, text='Go to frame 3', command=lambda:raise_frame(f1)).pack()
f2.config(bg='red')


Label(f3, text='ACTION2').pack(side='left')
f3.config(bg='green')

Label(f4, text='ACTION3').pack()
f4.config(bg='blue')


Label(f5, text='RELAXING FINAL').pack()
f5.config(bg='black')


raise_frame(f1)
root.mainloop()

Я не знаю, как расширить рамки, чтобы заполнить все окно.Я перепробовал все: геометрию, ширину и высоту и т. Д. Кажется, вероятно (на 100% уверен), что я делаю что-то не так, чтобы поместить эти кадры в полноэкранный режим.

Кто-нибудь может мне помочь?

Извините за код, которого нет в ООП.Я узнаю об этом.

Я ценю помощь!

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 18 сентября 2018

Расположение и геометрия окна на экране контролируется оконным менеджером.Ваше приложение предоставляет информацию о его размере, но оконный менеджер - это то, что решает, какие окна видны и где они размещены.По этой причине флаг, который контролирует, является ли окно Tk полноэкранным или нет, является одним из флагов wm_attributes .

Вы можете установить полноэкранное окно верхнего уровня, используя root.wm_attributes('-fullscreen', 1).Если ваши кадры затем управляются так, что они расширяются, чтобы заполнить родительский верхний уровень, тогда они заполнят экран.Для этого с использованием вашей сетки вы должны настроить менеджер геометрии корневой сетки, чтобы позволить (0,0) расширяться, чтобы заполнить область:

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

Или вы можете поместить каждый кадр здесь в 0,0 и заполнитьдоступное пространство, используя:

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

Это одна из ситуаций, когда place может быть целесообразным для grid.

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