Как мне отформатировать мой графический интерфейс, используя tkinter, используя .grid? - PullRequest
1 голос
/ 14 апреля 2019

Я пытаюсь использовать .grid для форматирования моего GUI, но он ничего не делает. Здесь ниже мой код и мой желаемый макет!

enter image description here Вот код, который я использую. Я совсем новичок в 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()

1 Ответ

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

pack(), grid() и place() - это три способа размещения виджетов в окне (или в другом виджете).
Если вы используете grid() с некоторым виджетом, то не используйте pack() илиplace().

Документ на effbot.org: сетка , упаковка , место

Я удалил все .pack() за исключением frame.pack() и получите почти то, что вы ожидали.

enter image description here

Теперь виджеты должны быть выровнены по левому краю ('west') с помощью sticky='w'

И после добавления второго Frame я получил

enter image description here

Код:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...