Кнопки появляются в неправильном столбце с помощью менеджера компоновки сетки tkinter - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь сделать это действительно простым GUI, используя tkinter, и я использую grid как менеджер раскладки. Но когда я помещаю определенную кнопку в столбец 2, она появляется в крайней левой части окна. Я просто хочу разместить кнопки именно там, где я хочу, в окне, но это, похоже, не работает.

Я не знаю, что именно я делаю неправильно, но вот код и скриншот.

from tkinter import *

class GUI:


    #Initialize the application window

    def __init__(self):



        w = 520
        h = 350
        self.window = Tk()
        ws = self.window.winfo_screenwidth()
        hs = self.window.winfo_screenheight()
        x = (ws/2) -(w/2)
        y = (hs/2) -(h/2)
        self.window.title("Excel file import")
        self.window.geometry('%dx%d+%d+%d' % (w, h, x, y))
        self.window.configure(bg='#004A99')
        self.window.resizable(False,False)

        # self.logo = Image.open(LOGO)
        # self.log = self.logo.resize((150,105),Image.ANTIALIAS)
        # self.logo2 = ImageTk.PhotoImage(self.log)
        # self.lbl1 = Label(self.window, image=self.logo2)
        # self.lbl1.image = self.logo2
        # self.lbl1.grid(row=4, column=0, ipadx=0, ipady=0, pady=0, padx=0)

        self.homeDirectory = r'C:/Users/Shtlrs/Desktop/Clients folder/'
        self.cfgFile = self.homeDirectory + r'cfg.ini'



        #Add client button

        self.addClientBtn = Button(self.window, text="Add new client", bg='#1b98e0', fg="white",
                              width=20, height=1)
        self.addClientBtn.grid(row=2, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.addClientBtn.bind("<ButtonRelease-1>",self.addNewClient)


        #Select client button

        self.selectClientBtn = Button(self.window, text="Select existing client", bg='#1b98e0', fg="white",
                                   width=20, height=1)
        self.selectClientBtn.grid(row=3, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.selectClientBtn.bind("<ButtonRelease-1>",self.selectClient)

        # Delete client button

        self.deleteClientBtn = Button(self.window, text="Delete existing client", bg='red', fg="white",
                                      width=20, height=1)
        self.deleteClientBtn.grid(row=4, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.deleteClientBtn.bind("<ButtonRelease-1>",self.deleteClient)

        #Cients dropdown ( appears next to "select existing clients")

        # clients = ["Medtronic","Ancora","Momo"]
        # self.clientsDropDown = ttk.Combobox(self.window,values=clients)
        # self.clientsDropDown.grid(row=3,column=1, ipadx=5,ipady=5,pady=5,padx=5)
        # self.clientsDropDown.current(0)
        self.restart = Button(self.window, text="Restart", bg='#1b98e0', fg="white",
                              width=20, height=1)
        self.restart.grid(row=5, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.restart.bind("<ButtonRelease-1>", self.restartAPP)





        self.window.mainloop()

Конечно, в коде не хватает многих других функций (для привязок) Но когда я запускаю это, я получаю: enter image description here

1 Ответ

2 голосов
/ 08 апреля 2020

Кнопки появляются в неправильном столбце с помощью менеджера компоновки сетки tkinter

На самом деле это правильная позиция. Из-за первого столбца нет виджета, поэтому кажется, что он находится в «неправильный» столбец.

Вы можете создать рамку и поместить в нее все свои кнопки. И используйте .pack(anchor=Center) или .pack(anchor="center"), чтобы сделать рамку в центре. Также вам нужно установить bg атрибут Frame, чтобы убедиться, что они имеют один и тот же цвет.

Вслед за вашим кодом приведен минимальный пример кода:

from tkinter import *

class GUI:


    #Initialize the application window

    def __init__(self):



        w = 520
        h = 350
        self.window = Tk()
        ws = self.window.winfo_screenwidth()
        hs = self.window.winfo_screenheight()
        x = (ws/2) -(w/2)
        y = (hs/2) -(h/2)

        self.window.title("Excel file import")
        self.window.geometry('%dx%d+%d+%d' % (w, h, x, y))
        self.window.configure(bg='#004A99')
        self.window.resizable(False,False)

        self.buttonFrame = Frame(self.window,bg="#004A99") # create a new frame
        self.buttonFrame.pack(anchor=CENTER) # make it center

        # self.logo = Image.open(LOGO)
        # self.log = self.logo.resize((150,105),Image.ANTIALIAS)
        # self.logo2 = ImageTk.PhotoImage(self.log)
        # self.lbl1 = Label(self.window, image=self.logo2)
        # self.lbl1.image = self.logo2
        # self.lbl1.grid(row=4, column=0, ipadx=0, ipady=0, pady=0, padx=0)

        self.homeDirectory = r'C:/Users/Shtlrs/Desktop/Clients folder/'
        self.cfgFile = self.homeDirectory + r'cfg.ini'



        #Add client button

        self.addClientBtn = Button(self.buttonFrame, text="Add new client", bg='#1b98e0', fg="white",width=20, height=1) # put your button in the frame.
        self.addClientBtn.grid(row=2, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.addClientBtn.bind("<ButtonRelease-1>",self.addNewClient)


        #Select client button

        self.selectClientBtn = Button(self.buttonFrame, text="Select existing client", bg='#1b98e0', fg="white",width=20, height=1) # put your button in the frame.
        self.selectClientBtn.grid(row=3, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.selectClientBtn.bind("<ButtonRelease-1>",self.selectClient)

        # Delete client button

        self.deleteClientBtn = Button(self.buttonFrame, text="Delete existing client", bg='red', fg="white",width=20, height=1) # put your button in the frame.
        self.deleteClientBtn.grid(row=4, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.deleteClientBtn.bind("<ButtonRelease-1>",self.deleteClient)

        #Cients dropdown ( appears next to "select existing clients")

        # clients = ["Medtronic","Ancora","Momo"]
        # self.clientsDropDown = ttk.Combobox(self.buttonFrame,values=clients) # put it in the frame.
        # self.clientsDropDown.grid(row=3,column=1, ipadx=5,ipady=5,pady=5,padx=5)
        # self.clientsDropDown.current(0)
        self.restart = Button(self.buttonFrame, text="Restart", bg='#1b98e0', fg="white",
                              width=20, height=1)
        self.restart.grid(row=5, column=2, ipadx=5, ipady=5, pady=5, padx=5)
        self.restart.bind("<ButtonRelease-1>", self.restartAPP)





        self.window.mainloop()

#You need to revise all the functions below.
    def addNewClient(self):
        pass

    def selectClient(self):
        pass

    def deleteClient(self):
        pass

    def restartAPP(self):
        pass

start = GUI()

Теперь это: enter image description here

...