微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用带有网格几何管理器的 Tkinter 使用 Python3 创建此布局?

如何解决如何使用带有网格几何管理器的 Tkinter 使用 Python3 创建此布局?

我正在尝试创建以下布局:

Desired Layout

这是我的代码

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 的构造函数都有两个参数:父控件和背景色。

我得到的结果不是上面想要的结果:

enter image description here

我做错了什么?如何创建所需的布局?请注意,背景颜色只是暂时的,以确认每个小部件使用了正确的空间量。这最终将成为用于设计和构建 Netflix Conductor 工作流程的应用程序。我想在黑色区域有一个带有菜单和按钮的工具栏,在红色区域有一个画布,用于显示代表工作流中任务的流程图元素,在蓝色区域有一个用于查看属性的树视图,以及一个文本编辑器底部的绿色区域用于查看/编辑原始 JSON。

解决方法

您需要:

  • heighttoolbarPane 指定 jsonPane 选项;
  • width 指定 propertiesPane 选项;
  • tk.E 添加到 stickyflowPane 选项;
  • grid_rowconfigure()grid_columnconfigure() 也使用 selfself.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 举报,一经查实,本站将立刻删除。