python - Tkinter 框架使用 create_window 选项等效于展开
问题描述
我正在做这个小项目。我有一个框架(最初扩展以占用其他框架未占用的空间),我添加了一个滚动条,因为该框架包含一组小部件,一旦按下按钮就会复制。
我现在的问题是,一旦我已经添加了滚动条并使其工作,我就不能再调整由 create_window 选项制作的框架的大小。它里面的小部件已经使用了填充和扩展选项,但仍然不会扩展。我什至在包含的小部件中指定了宽度和高度,但仍然无法正常工作。
以下是相关代码:
from tkinter import *
from tkinter import ttk
class Database(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
parent.state('zoomed')
self.parent = parent
#Main Frame
MainFrame=Frame(self, bg="white")
MainFrame.pack(expand = True, side = TOP, fill="both")
#Level 2 Frame
SubmainFrame=Frame(MainFrame)
SubmainFrame.pack(side=LEFT, fill = BOTH, expand = True)
#Level 3 Frame
DataFrame=Frame(SubmainFrame)
DataFrame.pack(side=RIGHT, expand = True, fill = BOTH)
frames = []
def New():
global widgetNames
global frameNames
DataFrameAF_=LabelFrame(frame,bg = "sky blue", text="Sub Info")
DataFrameAF_.pack(side = TOP, padx = 10, pady = 10, fill = BOTH, expand = True)
DataFrameAc = Frame(DataFrameAF_)
DataFrameAc.pack(side = LEFT, padx = 5)
DataFrameAc1 = Frame(DataFrameAc)
DataFrameAc1.pack(side = LEFT)
DataFrameAc2 = Frame(DataFrameAc)
DataFrameAc2.pack(side = LEFT)
#first column
self.lbl_ac2=Label(DataFrameAc1, text = "A1 ")
self.lbl_ac2.grid(row=1,column=0,sticky=W)
self.txt_ac2=ttk.Entry(DataFrameAc1, width=20)
self.txt_ac2.grid(row=1,column=1)
self.lbl_ac3=Label(DataFrameAc1, text = "A2 ")
self.lbl_ac3.grid(row=2,column=0,sticky=W)
self.txt_ac3=ttk.Entry(DataFrameAc1, width=20)
self.txt_ac3.grid(row=2,column=1)
#second column
self.lbl_ac2_=Label(DataFrameAc2, text = "B1 ")
self.lbl_ac2_.grid(row=1,column=0,sticky=W)
self.txt_ac2_=ttk.Entry(DataFrameAc2, width=20)
self.txt_ac2_.grid(row=1,column=1)
self.lbl_ac3_=Label(DataFrameAc2, text = "B2 ")
self.lbl_ac3_.grid(row=2,column=0,sticky=W)
self.txt_ac3_=ttk.Entry(DataFrameAc2, width=20)
self.txt_ac3_.grid(row=2,column=1)
DataFrameAF=LabelFrame(DataFrame, text="Information")
DataFrameAF.pack(side = TOP, pady = 10)
canvas = Canvas(DataFrameAF, borderwidth=0, background="#ffffff")
frame = Frame(canvas, background="#ffffff")
vsb = Scrollbar(DataFrameAF, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill=BOTH, expand=True)
canvas.create_window((20,20), window=frame, anchor="nw")
def reset_scrollregion(event):
canvas.configure(scrollregion=canvas.bbox("all"))
frame.bind("<Configure>", reset_scrollregion)
First_Info = New()
createWidgetButton = Button(frame, text="New Entry", command=New)
createWidgetButton.pack(side=BOTTOM, fill="x")
root = Tk()
database_window = Database(root)
database_window.pack(side="top", fill="both", expand=True)
database_window.update()
root.mainloop()
解决方案
推荐阅读
- python - 由于源是数组,如何使用 Icontains 在 ListField 中搜索?
- angular - 使用 rest api 的 dialogflow v2 OAuth
- webpack - HMR 中的 Webpack 应用方法
- node.js - 带有鉴别器的猫鼬模式不保存字段
- java - 在Java中使用Selenium通过部分css类查找所有元素
- php - Wordpress 写入数据库,主键自动增量不起作用
- ios12 - SiriKit (iOS 12) 自定义 Intent 处理程序未被调用
- android - 我收到此错误“处理清单失败”
- python - python请求中默认的请求头是什么
- python - 如何在 CSV 标题和字典键之间循环操作