Python tkinter размещение кнопки в сетке внутри фрейма зависает при исполнении - PullRequest
0 голосов
/ 18 декабря 2018

Я создал два кадра, используя Tkinter.В одном из кадров я пытаюсь добавить кнопку с помощью сетки.Когда я запускаю программу, нет вывода.Вместо этого он просто зависает, и мне приходится убивать процесс.

Вот код:

from Tkinter import *
window=Tk()
window.title("calculator")
window.geometry("500x500")
window.resizable(0,0)

input_field=StringVar()
display_frame=Frame(window).pack(side="top")
button_frame=Frame(window).pack(side="bottom")

text=Entry(display_frame,font=('arial',20,'bold'),textvariable=input_field,justify="right").pack(fill="x",ipady=10)
clear_button=Button(button_frame,text="C").grid(row=0)
window.mainloop()

Однако, если я изменю переменную clear_button на

clear_button=Button(button_frame,text="C").pack()

Я получаю вывод.Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Вы не можете смешивать grid и pack внутри одного контейнера (фрейма / окна).

При этом вы должны понимать, что ваш display_frame и button_frame переменные на самом деле None!Почему, потому что Frame(Window) вернет объект Frame, но вы применили функцию pack () сразу после того, чье возвращаемое значение равно None .

Так что в основномсозданные вами виджеты Entry и Button имеют master=None, и это означает, что они не находятся внутри определенных вами фреймов, а фактически являются частью основного окна.

Теперь вы можете легко понять, почемуclear_button=Button(button_frame,text="C").pack() работал, так как теперь в главном окне есть только один менеджер геометрии, а именно pack .

Вот рабочий код.

from tkinter import * # "Tkinter" on python 2
window=Tk()
window.title("calculator")
window.geometry("500x500")
window.resizable(0,0)

input_field=StringVar()
display_frame=Frame(window)
display_frame.pack(side="top")
button_frame=Frame(window)
button_frame.pack(side="bottom")

Entry(display_frame,font=('arial',20,'bold'),textvariable=input_field,justify="right").pack(fill="x",ipady=10)
Button(button_frame, text="C").grid(row=0)
window.mainloop()
0 голосов
/ 18 декабря 2018

Вы не можете использовать оба метода grid и pack для виджетов, имеющих один и тот же мастер.

Здесь, для получения более детального понимания, следуйте приведенной ниже теме:

методы python pack () и grid () вместе

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