【问题标题】:Can't set the size of a frame inside a canvas无法在画布内设置框架的大小
【发布时间】:2019-11-28 20:08:04
【问题描述】:

我正在制作文本框的网格布局,类似于 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"))

【问题讨论】:

  • frame.pack_propagate(False) ?并且框架不会尝试更改尺寸以适合儿童/儿童尺寸。 effbot.org:pack_propagate(flag)
  • 谢谢,这允许框架改变大小。非常感谢。

标签: python python-3.x tkinter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多