无法设置画布内框架的尺寸

时间:2019-11-28 20:08:04

标签: python python-3.x tkinter

我正在制作文本框的网格布局,类似于Microsoft Excel。 我已经制作了一个画布(在框架内),并使用create_window将一个包含100个文本框的框架(每个框架在框架内)添加到画布中,以便能够使用右侧和底部的滚动条,与Microsoft Excel中的滚动条非常相似。文本框每个都在自己的框架中的原因是,这样我可以通过使文本框填充框架来定义其大小(以像素为单位)。我的问题是,当我设置容纳文本框的框架的尺寸时,它根本不会改变框架的尺寸。默认情况下,它是文本框的大小,就好像框架不存在一样。请帮忙?下面的代码:

    def __init__(self, master):
        master.title('Table Viewmode')
        #'widthxheight+Xoffset+Yoffset'
        master.geometry('800x600+500+200')

        self.tableContainer = Frame(master)
        self.tableContainer.pack(side="left", fill="both", expand=True)

        #Frame and Canvas
        self.tableCanvas = Canvas(self.tableContainer)
        self.tableFrame = Frame(self.tableCanvas)
        #Canvas stretch config
        self.tableCanvas.grid(row=0, column=0, sticky=N+S+E+W)#.pack(side="left", fill="both", expand=True)
        self.tableContainer.grid_columnconfigure(0, weight=1)
        self.tableContainer.grid_rowconfigure(0, weight=1)

        #Scrollbars
        self.yscrollBar = Scrollbar(self.tableContainer, orient=VERTICAL,
                                    command=self.tableCanvas.yview)
        self.yscrollBar.grid(row=0, column=1, sticky=N+S)
        self.tableCanvas.config(yscrollcommand=self.yscrollBar.set)
        self.xscrollBar = Scrollbar(self.tableContainer, orient=HORIZONTAL,
                                    command=self.tableCanvas.xview)
        self.xscrollBar.grid(row=1, column=0, sticky=W+E)
        self.tableCanvas.config(xscrollcommand=self.xscrollBar.set)
        self.xscrollBar.config()

        self.tableCanvas.create_window((4,4), window=self.tableFrame, anchor="nw")

        self.createTable(10,10)

        self.tableFrame.bind("<Configure>", self.frameConfigureHandler)

    #Lines of code in question
    def createTable(self, rows, columns):
        self.frameList = []
        for row in range(0, rows):
            for column in range(0, columns):
                frame = Frame(self.tableFrame)
                frame.config(width=10,height=10)
                text = Text(frame)#, height=1, width=2) I can change the size of the text boxes, this works fine.
                text.insert(END, str(row)+str(column))
                text.pack(side=LEFT, expand=True, fill=BOTH)
                frame.grid(row = row, column = column)

    def frameConfigureHandler(self, event):
        self.tableCanvas.configure(scrollregion=self.tableCanvas.bbox("all"))

1 个答案:

答案 0 :(得分:0)

frame.pack_propagate(False),这将阻止框架符合其子项的大小,并允许自定义框架的大小。