Кнопка изменения размера кадра в Tkinter - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в Tkinter, и у меня проблема с фреймами при добавлении виджетов. В этом примере я добавляю кнопку, которая делает мой кадр шире, когда я помещаю в него кнопку с помощью .grid ().

Как сделать рамку фиксированной? Я хочу, чтобы синяя рамка в коде ниже сохраняла ту же ширину, когда я добавляю кнопку.

Заранее спасибо.

С уважением, Laphroaig


class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        master.title("Yatzy - The Game")
        master.geometry("800x600+0+0")
        master.iconbitmap(r'dice.ico')
        master.state('zoomed')

        # Create grid index for the window
        for r in range(20):
            self.master.rowconfigure(r, weight=1)

        for c in range(20):
            self.master.columnconfigure(c, weight=1)


        # Place Frame 1
        Frame1 = Frame(master, bg="blue")
        Frame1.grid(row = 0, column = 0, rowspan = 20, columnspan = 3, sticky=W+E+N+S)

        # Place Frame 2
        Frame2 = Frame(master, bg="green")
        Frame2.grid(row=0, column=3, rowspan=20, columnspan=17, sticky = W+E+N+S)

        # Place Frame 3
        Frame3 = Frame(master, bg="red")
        Frame3.grid(row=5, column=8, rowspan=10, columnspan=7, sticky = W+E+N+S)

        # Place button 1
        btn_1 = Button(master, text="hello123")
        btn_1.grid(row=0, column=0)


root = Tk()
app = Window(master=root)
app.mainloop()

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете запретить контенту влиять на размер кадра с помощью grid_propagate(False). См. Пример ниже.

Другие вещи; Вы наследуете от Frame, но никогда не кладете ничего внутри self, вместо этого вы помещаете все внутри self.master ie. root. Я изменил, чтобы поместить все в self, а затем упаковать self в root.

Я также удалил значок, поскольку у меня нет вашего файла значков.

from tkinter import *

class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        master.title("Yatzy - The Game")
        master.geometry("800x600+0+0")
        master.state('zoomed')
        self.pack(expand=True, fill='both')

        # Create grid index for the window
        for r in range(20):
            self.rowconfigure(r, weight=1)

        for c in range(20):
            self.columnconfigure(c, weight=1)


        # Place Frame 1
        Frame1 = Frame(self, bg="blue")
        Frame1.grid(row = 0, column = 0, rowspan = 20, columnspan = 3, sticky=W+E+N+S)
        Frame1.grid_propagate(False) # Stop grid() from resizing container

        # Place Frame 2
        Frame2 = Frame(self, bg="green")
        Frame2.grid(row=0, column=3, rowspan=20, columnspan=17, sticky = W+E+N+S)

        # Place Frame 3
        Frame3 = Frame(self, bg="red")
        Frame3.grid(row=5, column=8, rowspan=10, columnspan=7, sticky = W+E+N+S)

        # Place button 1
        btn_1 = Button(Frame1, text="hello123")
        btn_1.grid(row=0, column=0)


root = Tk()
app = Window(master=root)
app.mainloop()
...