Python 使用布局管理器网格动态调整带有滚动条的画布大小
我做了一个画布,我不知道为什么,我不会让它与框架调整大小。 要么是一些明显的东西丢失了,然后把里面所有的东西都弄得乱七八糟,要么是一些奇怪的事情发生了,我不明白。不管怎么说,这是我的代码,希望它能被清除Python 使用布局管理器网格动态调整带有滚动条的画布大小,python,python-3.x,tkinter,tkinter-canvas,Python,Python 3.x,Tkinter,Tkinter Canvas,我做了一个画布,我不知道为什么,我不会让它与框架调整大小。 要么是一些明显的东西丢失了,然后把里面所有的东西都弄得乱七八糟,要么是一些奇怪的事情发生了,我不明白。不管怎么说,这是我的代码,希望它能被清除 import tkinter as tk root = tk.Tk() class my_figure(tk.Frame): def __init__(self, master, width=450,height=590): tk.F
import tkinter as tk
root = tk.Tk()
class my_figure(tk.Frame):
def __init__(self, master,
width=450,height=590):
tk.Frame.__init__(self, master)
self.master = master
self.width=width
self.bind("<Configure>", self.update)
#DownFrame
self.body = tk.Frame(self, width=width,height=height,relief='sunken',bd=2)
self.vscrbar = tk.Scrollbar(self.body)
self.hscrbar = tk.Scrollbar(self.body,orient=tk.HORIZONTAL)
self.Display = tk.Canvas(self.body, width=width,height=height,
background='#f0f0f0',highlightthickness=0,
yscrollcommand=self.vscrbar.set,
xscrollcommand=self.hscrbar.set)
self.vscrbar.config(command=self.Display.yview)
self.hscrbar.config(command=self.Display.xview)
self.body.grid(column=0,row=1, sticky='nswe')
self.vscrbar.grid(column=1,sticky='ns')
self.hscrbar.grid(row=1,sticky='we')
self.Display.grid(column=0,row=0,
sticky='nswe')
self.grid_rowconfigure(1, weight=1)
self.columnconfigure(0, weight=1)
def update(self, event):
print(event.widget.winfo_width())
## self.Header.config(width=event.width)
## self.Button.config(width=event.width)
## self.body.config(width=event.width)
## self.Display.config(width=event.width)
figure = my_figure(root)
figure.grid(column=0, row=0)
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0,weight=1)
root.mainloop()
将tkinter作为tk导入
root=tk.tk()
类别my_图形(tk.框架):
定义初始(自我,主,
宽度=450,高度=590):
tk.Frame.\uuuuu init\uuuuuuu(自,主)
self.master=master
自身宽度=宽度
self.bind(“,self.update”)
#底架
self.body=tk.Frame(self,width=width,height=height,relief='sinken',bd=2)
self.vscrbar=tk.Scrollbar(self.body)
self.hscrbar=tk.Scrollbar(self.body,orient=tk.HORIZONTAL)
self.Display=tk.Canvas(self.body,width=width,height=height,
背景='#f0',高光厚度=0,
yscrollcommand=self.vscrbar.set,
xscrollcommand=self.hscrbar.set)
self.vscrbar.config(命令=self.Display.yview)
self.hscrbar.config(命令=self.Display.xview)
self.body.grid(列=0,行=1,sticky='nswe')
self.vscrbar.grid(column=1,sticky='ns')
self.hscrbar.grid(row=1,sticky='we')
self.Display.grid(列=0,行=0,
粘性('nswe')
self.grid_rowconfigure(1,权重=1)
self.columnconfigure(0,权重=1)
def更新(自身、事件):
打印(event.widget.winfo_width())
##self.Header.config(宽度=事件宽度)
##self.Button.config(宽度=事件宽度)
##self.body.config(宽度=事件宽度)
##self.Display.config(宽度=事件宽度)
图=我的图(根)
图.网格(列=0,行=0)
root.grid\u columnconfigure(0,权重=1)
root.grid_rowconfigure(0,权重=1)
root.mainloop()
您使用了嵌套的父容器。您的my_figure
是从Frame
继承的小部件。您的my_figure
中还有一个Frame
小部件。您需要为这两个小部件设置columnconfigure
和rowconfigure
还需要为您的图形使用sticky=“nwes”
虽然它可以正常工作,pack
manager将是最佳选择
代码:
将tkinter作为tk导入
root=tk.tk()
类别my_图形(tk.框架):
定义初始(自我,主):
tk.Frame.\uuuuu init\uuuuuuu(自,主)
self.master=master
#自我[“bd”]=10
self.bind(“,self.update”)
#底架
self.body=tk.Frame(self,relief='sunken')
对于范围内的i(self.body.grid_size()[1]+1):
self.body.grid_rowconfigure(i,权重=1)
对于范围内的i(self.body.grid_size()[0]+1):
self.body.grid_column配置(i,权重=1)
对于范围内的i(self.grid_size()[1]+1):
self.grid_rowconfigure(i,权重=1)
对于范围内的i(self.grid_size()[0]+1):
self.grid\u column配置(i,权重=1)
self.vscrbar=tk.Scrollbar(self.body)
self.hscrbar=tk.Scrollbar(self.body,orient=tk.HORIZONTAL)
self.Display=tk.Canvas(self.body,
背景='#f0',高光厚度=0,
yscrollcommand=self.vscrbar.set,
xscrollcommand=self.hscrbar.set)
self.vscrbar.config(命令=self.Display.yview)
self.hscrbar.config(命令=self.Display.xview)
self.body.grid(列=0,行=0,sticky='nswe')
self.vscrbar.grid(行=0,列=1,sticky='ns')
self.hscrbar.grid(行=1,列=0,sticky='we')
self.Display.grid(列=0,行=0,
粘性('nswe')
def更新(自身、事件):
打印(event.widget.winfo_width())
##self.Header.config(宽度=事件宽度)
##self.Button.config(宽度=事件宽度)
##self.body.config(宽度=事件宽度)
##self.Display.config(宽度=事件宽度)
图=我的图(根)
图.网格(列=0,行=0,sticky=“nwes”)
root.grid\u columnconfigure(0,权重=1)
root.grid_rowconfigure(0,权重=1)
root.mainloop()
import tkinter as tk
root = tk.Tk()
class my_figure(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
# self["bd"] = 10
self.bind("<Configure>", self.update)
# DownFrame
self.body = tk.Frame(self, relief='sunken')
for i in range(self.body.grid_size()[1] + 1):
self.body.grid_rowconfigure(i, weight=1)
for i in range(self.body.grid_size()[0] + 1):
self.body.grid_columnconfigure(i, weight=1)
for i in range(self.grid_size()[1] + 1):
self.grid_rowconfigure(i, weight=1)
for i in range(self.grid_size()[0] + 1):
self.grid_columnconfigure(i, weight=1)
self.vscrbar = tk.Scrollbar(self.body)
self.hscrbar = tk.Scrollbar(self.body, orient=tk.HORIZONTAL)
self.Display = tk.Canvas(self.body,
background='#f0f0f0', highlightthickness=0,
yscrollcommand=self.vscrbar.set,
xscrollcommand=self.hscrbar.set)
self.vscrbar.config(command=self.Display.yview)
self.hscrbar.config(command=self.Display.xview)
self.body.grid(column=0, row=0, sticky='nswe')
self.vscrbar.grid(row=0, column=1, sticky='ns')
self.hscrbar.grid(row=1, column=0, sticky='we')
self.Display.grid(column=0, row=0,
sticky='nswe')
def update(self, event):
print(event.widget.winfo_width())
## self.Header.config(width=event.width)
## self.Button.config(width=event.width)
## self.body.config(width=event.width)
## self.Display.config(width=event.width)
figure = my_figure(root)
figure.grid(column=0, row=0, sticky="nwes")
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0,weight=1)
root.mainloop()