如何解决如何使用带有网格几何管理器的 Tkinter 使用 Python3 创建此布局?
这是我的代码:
from . import FlowPane,JsonPane,PropertiesPane,ToolbarPane
import tkinter as tk
class ConflixEditor(tk.Tk):
def __init__(self,args):
super().__init__()
self.__dict__.update({k: v for k,v in locals().items() if k != 'self'})
self.minsize(width=1024,height=768)
self.title('Conflix Editor')
# Widget Creation
self.frame = tk.Frame(self)
self.toolbarPane = ToolbarPane.ToolbarPane(self.frame,bg='black')
self.flowPane = FlowPane.FlowPane(self.frame,bg='red')
self.propertiesPane = PropertiesPane.PropertiesPane(self.frame,bg='blue')
self.jsonPane = JsonPane.JsonPane(self.frame,bg='green')
# Widget Layout
self.grid_columnconfigure(0,weight=1)
self.grid_rowconfigure(2,weight=1)
self.frame.grid(row=0,column=0,sticky=tk.N+tk.E+tk.S+tk.W)
self.toolbarPane.grid(row=0,columnspan=3,rowspan=2,sticky=tk.N+tk.E+tk.W)
self.flowPane.grid(row=2,columnspan=2,rowspan=5,sticky=tk.N+tk.S+tk.W)
self.propertiesPane.grid(row=2,column=2,columnspan=1,sticky=tk.N+tk.E+tk.S)
self.jsonPane.grid(row=7,rowspan=3,sticky=tk.E+tk.S+tk.W)
FlowPane、JsonPane、PropertiesPane、ToolbarPane 的构造函数都有两个参数:父控件和背景色。
我做错了什么?如何创建所需的布局?请注意,背景颜色只是暂时的,以确认每个小部件使用了正确的空间量。这最终将成为用于设计和构建 Netflix Conductor 工作流程的应用程序。我想在黑色区域有一个带有菜单和按钮的工具栏,在红色区域有一个画布,用于显示代表工作流中任务的流程图元素,在蓝色区域有一个用于查看属性的树视图,以及一个文本编辑器底部的绿色区域用于查看/编辑原始 JSON。
解决方法
您需要:
- 为
height
和toolbarPane
指定jsonPane
选项; - 为
width
指定propertiesPane
选项; - 将
tk.E
添加到sticky
的flowPane
选项; - 对
grid_rowconfigure()
和grid_columnconfigure()
也使用self
和self.frame
以下是更新的代码:
class ConflixEditor(tk.Tk):
def __init__(self,*args):
super().__init__()
#self.__dict__.update({k: v for k,v in locals().items() if k != 'self'})
self.minsize(width=1024,height=768)
self.title('Conflix Editor')
# make self.frame use all the space of root window
self.grid_columnconfigure(0,weight=1)
self.grid_rowconfigure(0,weight=1)
# Widget Creation
self.frame = tk.Frame(self)
self.toolbarPane = ToolbarPane.ToolbarPane(self.frame,bg='black',height=100) # added height option
self.flowPane = FlowPane.FlowPane(self.frame,bg='red')
self.propertiesPane = PropertiesPane.PropertiesPane(self.frame,bg='blue',width=250) # added width option
self.jsonPane = JsonPane.JsonPane(self.frame,bg='green',height=200) # added height option
# Widget Layout
self.frame.grid_columnconfigure(0,weight=1) # used self.frame instead of self
self.frame.grid_rowconfigure(2,weight=1) # used self.frame instead of self
self.frame.grid(row=0,column=0,sticky=tk.N+tk.E+tk.S+tk.W)
self.toolbarPane.grid(row=0,columnspan=3,rowspan=2,sticky=tk.N+tk.E+tk.W)
self.flowPane.grid(row=2,columnspan=2,rowspan=5,sticky=tk.N+tk.E+tk.S+tk.W) # added tk.E
self.propertiesPane.grid(row=2,column=2,columnspan=1,sticky=tk.N+tk.E+tk.S)
self.jsonPane.grid(row=7,rowspan=3,sticky=tk.E+tk.S+tk.W)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。