Python 如何使用.grid使用tkinter格式化GUI?

Python 如何使用.grid使用tkinter格式化GUI?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正试图使用.grid来格式化我的GUI,但它什么也没做。下面是我的代码和我想要的布局 这是我正在使用的代码。我对Python很陌生 我不确定除了.grid之外还有其他的格式化方法,所以其他的选项也很好 from tkinter import * class PayrollSummary: def __init__(pay): window = Tk() window.title("Employee Payroll") #Add Fr

我正试图使用.grid来格式化我的GUI,但它什么也没做。下面是我的代码和我想要的布局

这是我正在使用的代码。我对Python很陌生

我不确定除了.grid之外还有其他的格式化方法,所以其他的选项也很好

from tkinter import *

class PayrollSummary:
    def __init__(pay):
        window = Tk()
        window.title("Employee Payroll")

        #Add Frame 1
        frame1 = Frame(window)
        frame1.pack()

        #Add ReadFile Button
        btReadFile = Button(frame1, text = "Read File")
        btReadFile.pack()

        #Add ShowPayroll Button
        btShowPayroll = Button(frame1, text = "Show Payroll")
        btShowPayroll.pack()

        #Add FindEmployee by Name Button
        btFindEmployee = Button(frame1, text = "Find Employee by Name")
        btFindEmployee.pack()

        #Add Highest Radio Button
        rbHigh = Radiobutton(frame1, text = "Highest")
        rbHigh.pack()

        #Add Lowest Radio Button
        rbLow = Radiobutton(frame1, text ="Lowest")
        rbLow.pack()

        #Add FindEmployee by Amount Button
        btFindEmployee_A = Button(frame1, text = "Find Employee by Amount")
        btFindEmployee_A.pack()

        #Add WriteOutput Button
        btOutput = Button(frame1, text = "Write Output to File")
        btOutput.pack()

        #Add Cancel Button
        btCancel = Button(frame1, text = "Cancel")
        btCancel.pack()



        btReadFile.grid(row = 1, column = 2)
        btShowPayroll.grid(row = 2, column = 2)
        btFindEmployee.grid(row = 2, column = 4)
        rbHigh.grid(row = 3, column = 2)
        rbLow.grid(row = 3, column = 4)
        btFindEmployee_A.grid(row = 3, column = 6)
        btOutput.grid(row = 4, column = 2)
        btCancel.grid(row = 4, column = 4)



        window.mainloop()

PayrollSummary()
pack()
grid()
place()
是将小部件放入窗口(或其他小部件)的三种方法。
如果对某些小部件使用
grid()
,则不要使用
pack()
place()

effbot.org上的文件:

我删除了所有的
.pack()
,除了
frame.pack()
之外,几乎得到了您所期望的

现在小部件需要左对齐(
'west'
),使用
sticky='w'

在添加第二个
帧之后,我得到了

代码:

pack()
grid()
place()
是将小部件放入窗口(或其他小部件)的三种方法。
如果对某些小部件使用
grid()
,则不要使用
pack()
place()

effbot.org上的文件:

我删除了所有的
.pack()
,除了
frame.pack()
之外,几乎得到了您所期望的

现在小部件需要左对齐(
'west'
),使用
sticky='w'

在添加第二个
帧之后,我得到了

代码:

使用
pack()
grid()
,不要同时在同一个元素上使用。您还可以使用
pack()
frame
放在窗口中,使用
grid()
将小部件放在frame内。使用
pack()
grid()
,不要同时放在同一个元素上。您还可以使用
pack()
在窗口中放置
frame
,并使用
grid()
在框架中放置小部件。
from tkinter import *

class PayrollSummary:
    def __init__(pay):
        window = Tk()
        window.title("Employee Payroll")

        #Add Frame 1
        frame1 = Frame(window)
        frame1.pack()

        #Add ReadFile Button
        btReadFile = Button(frame1, text = "Read File")

        #Add ShowPayroll Button
        btShowPayroll = Button(frame1, text = "Show Payroll")

        #Add FindEmployee by Name Button
        btFindEmployee = Button(frame1, text = "Find Employee by Name")

        #Add Highest Radio Button
        rbHigh = Radiobutton(frame1, text = "Highest")

        #Add Lowest Radio Button
        rbLow = Radiobutton(frame1, text ="Lowest")

        #Add FindEmployee by Amount Button
        btFindEmployee_A = Button(frame1, text = "Find Employee by Amount")

        #Add WriteOutput Button
        btOutput = Button(frame1, text = "Write Output to File")

        #Add Cancel Button
        btCancel = Button(frame1, text = "Cancel")

        btReadFile.grid(row = 1, column = 2, sticky='w')
        btShowPayroll.grid(row = 2, column = 2, sticky='w')
        btFindEmployee.grid(row = 2, column = 4, sticky='w')
        rbHigh.grid(row = 3, column = 2, sticky='w')
        rbLow.grid(row = 3, column = 4, sticky='w')
        btFindEmployee_A.grid(row = 3, column = 6, sticky='w')
        btOutput.grid(row = 4, column = 2, sticky='w')
        btCancel.grid(row = 4, column = 4, sticky='w')

        #Add Frame 2
        frame2 = Frame(window, bg='red')
        frame2.pack(fill='both') # try without `fill`

        label2 = Label(frame2, text='Label in bottom Frame', bg='green')
        label2.pack()

        window.mainloop()

PayrollSummary()