Fazer quadros em Tkinter contêm local grade de sistemas?

0

Pergunta

Pergunta muito simples que eu conseguir encontrar a resposta para no Stack Exchange. (Só esse enganador thread: Python3 Tkinter: Redes Dentro de Redes? Quadros Ao Lado De Outros Quadros? que, infelizmente, não responde a pergunta).

Eu estou usando tkinter com Python para tentar um programa com uma interface gráfica. Infelizmente, eu completamente não entendem o sistema de grade.

Eu estava sob a impressão de que cada quadro contém o seu próprio sistema de grade, onde 0,0 é o canto superior esquerdo do quadro.

Eu criei este código:

root = Tk()

main_frame = Frame(root, width='1520', height='1080', bg='#a1a1a1').grid(row=0, column=1)
side_frame = Frame(root, width='400', height='1080', bg='#757575').grid(row=0, column=0)

header_label = Label(main_frame, text='Heading', font=('Agency', 48), bg='#a1a1a1', fg='#ffffff').grid(row=0, column=0)

E espera-se que porque o rótulo é definido para (0,0) no quadro principal, que o nome deve aparecer no quadro principal. No entanto, isso não aconteceu. Eu acho que um pouco estranho e perturbador. Abaixo está uma imagem do que está acontecendo em vez - o rótulo do cabeçalho está aparecendo no "side_frame'.

Com defeito layout de imagem

Alguém por favor poderia me explicar como o sistema de grade funciona? Eu não estava realmente tendo problemas até que eu tentei adicionar uma barra de deslocamento para a main_frame - então eu percebi que há uma séria falta de jeito incorporado dentro de tkinter e que eu gostaria de entender corretamente-lo.

Obrigado!

layout optimization python tkinter
2021-11-21 20:36:50
1

Melhor resposta

1

O problema é que você está main_frame e side_frame para None, assim de passagem, que como o pai para qualquer outro widget irá fazer com que o widget um filho da raiz widget.

Isso é porque em python x=y().z() define o valor de x para z(). Assim, quando você fizer main_frame = Frame(...).grid(...) define main_frame para o resultado do .grid(...)e grid sempre retorna None.

Você deve separar o widget de criação do layout do widget, e esta é uma das razões por que. A outra grande razão é que torna o código mais fácil de ler e visualizar.

main_frame = Frame(root, width='1520', height='1080', bg='#a1a1a1')
side_frame = Frame(root, width='400', height='1080', bg='#757575')

main_frame.grid(row=0, column=1)
side_frame.grid(row=0, column=0)
2021-11-21 21:25:09

Obrigado! Não compreendo plenamente os detalhes sobre como isso é diferente de separá-los, mas você definitivamente resolvido o meu problema. Agora esperar a próxima edição para surgir... :D
Jordan Regan

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................