Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文本小部件在主框架中增大列宽_Python_User Interface_Tkinter - Fatal编程技术网

Python 文本小部件在主框架中增大列宽

Python 文本小部件在主框架中增大列宽,python,user-interface,tkinter,Python,User Interface,Tkinter,我有一个有五列的主框架,我希望它始终保持相同的宽度,不管窗口的大小如何调整。共有三行,底部为按钮 问题是,当我在较大的第3帧中添加一个文本小部件时,它会将第2、3、4列的列宽延伸到比第0和1列更宽的位置 我试图通过确保将所有列的权重设置为相等来解决这个问题,但这只会有助于在调整主窗口大小时保持列的相对大小。当主节点被实例化时,它不会强制列与相同 我尝试使用一个self.columnconfigure(c,minsize=100),这使得在实例化对象时列的宽度看起来均匀。但是,如果我将窗口的大小调

我有一个有五列的主框架,我希望它始终保持相同的宽度,不管窗口的大小如何调整。共有三行,底部为按钮

问题是,当我在较大的第3帧中添加一个文本小部件时,它会将第2、3、4列的列宽延伸到比第0和1列更宽的位置

我试图通过确保将所有列的权重设置为相等来解决这个问题,但这只会有助于在调整主窗口大小时保持列的相对大小。当主节点被实例化时,它不会强制列与相同

我尝试使用一个
self.columnconfigure(c,minsize=100)
,这使得在实例化对象时列的宽度看起来均匀。但是,如果我将窗口的大小调整得更大,则三个右侧列的扩展速度要快于左侧两列,尽管所有列的权重都相同!如果我将窗口设为两个窄窗口,为了保持宽度的“minsize”,最右侧的列将不可见。所以这不是一个解决方案

继续

    """ Frame 1 """
    self.f1 = Frame(self, bg="red")
    self.f1.grid(row=0, column=0, columnspan=2,rowspan=1, sticky=N+S+W+E)

    self.f1.bind("<Button-1>", self.f1_button)

    """didn't help"""
    #self.f1.columnconfigure(0, weight=1)
    #self.f1.columnconfigure(1, weight=1)

    self.label_1_var = StringVar()
    self.label_1_var.set("frame 1")
    self.label_1 = Label(self.f1, textvariable=self.label_1_var)
    self.label_1.grid(row=1, column=1)


    """ Frame 2 """
    self.f2 = Frame(self, bg="blue")
    self.f2.grid(row=1, column=0, columnspan=2,rowspan=1, sticky=N+S+E+W)

    self.f2.bind("<Button-1>", self.f2_button)

    """didn't help"""
    #self.f2.columnconfigure(0, weight=1)
    #self.f2.columnconfigure(1, weight=1)

    self.label_2_var = StringVar()
    self.label_2_var.set("frame 2")
    self.label_2 = Label(self.f2, textvariable = self.label_2_var)
    self.label_2.grid(row=1, column=1)
""" frame 3 """
    self.f3 = Frame(self, bg="green")
    self.f3.grid(row=0, column=2, columnspan=3, rowspan = 2, sticky=N+S+E+W)
    self.f3.rowconfigure(0,weight=1)
    self.f3.rowconfigure(1,weight=0)
    self.f3.columnconfigure(0, weight=1)        

    """list some files to try"""
    files = glob.glob("*")
    default_display =""
    for fn in files:
        default_display += fn + "\n"

    """ Text widget """
    self.f3_text = Text(self.f3)
    self.f3_text.insert(END, default_display)
    self.f3_text.grid(column=0, row=0,sticky=N+S+E+W)

    """ Text scrollbar """
    self.sb = Scrollbar(self.f3)
    self.sb.grid(column=1, row=0, sticky=N+S+E+W)
    self.f3_text.config(yscrollcommand=self.sb.set)
    self.sb.config(command=self.f3_text.yview)

    """ Entry Window """
    self.f3_entry = Entry(self.f3)
    self.f3_entry.grid(column=0, row=1, columnspan=2, sticky=N+S+E+W)

要设置文本小部件的宽度:

text = Text(frame, width=20)
默认情况下,宽度设置为80个字符。 请注意,此值不是常量,因此小部件的大小调整正确。

提示:“……无论大小如何”: 尽管依赖自动化Tk GUI MVC可视部件中公开的最常见公共方法的行为/服务是很好的,但现实世界的布局复杂性可能会让我们走到死胡同

尝试一种硬编码编程方式从Tk GUI MVC控制器部件的新的、更改的内部值自动特别重新计算/重新构建Tk GUI MVC可视部件:

 master.bind( '<Configure>', aResizeCallbackHANDLER( ) )  # MVC-Controller Part TRIGGER

 def aResizeCallbackHANDLER( self, anEvent ):             # Reactor:
     # inspect <anEvent>.{}                               # .bind()-bound actor
     # and     <anEvent>.widget.{}                        # details from
     # incl.   <anEvent>.widget.<Tree-sub-element>.{}     # Tk-GUI-MVC-Model Part
     #
     #         <anEvent>.widget      <-- system-assigned <widget>-instance
     #                  .height      on-{ <Configure> }
     #                  .width       on-{ <Configure> }
     #                  .serial      <-- system-assigned Integer
     #                  .time        <-- system-assigned Integer ( .inc each msec )
     # .
     # ..
     # ...
     # Act upon changes and enforce new, re-calculated values
     #                      into sub-ordinated geometry
     # ...
     #
master.bind(“”,aResizeCallbackHANDLER())#MVC控制器部件触发器
def aResizeCallbackHANDLER(自身、事件):#反应器:
#检查{}#.bind()-绑定的参与者
#和.widget.{}#详细信息来自
#incl..widget..{}#Tk GUI MVC模型部件
#

#.widget一个简单的解决方案是将widget的宽度和高度设置为
1
,然后依靠网格选项拉伸它以填充其容器。因为它的自然大小比它所在的细胞小,所以它不会导致细胞生长。

你说“这个值不是常数”是什么意思?哦,我觉得这有点含糊不清。我的意思是宽度不是固定的,但是可以通过调整窗口的大小来调整。@anonymousDownVOTEr:这个原则是健壮的、通用的,并且独立于
.grid(row=r,column=c,…)
layout manager:)的使用而工作。您的建议似乎可以归结为“忽略Tkinter的优势,转而依赖于更适合其他工具包的解决方案”。我只是不认为这是一个有用的答案。也许如果你提供了实际的工作代码,它可能会有用,但它只是一个非常冗长的方法,什么都不做,并且使用的语言在Tkinter的上下文中不起作用(“Tk GUI MVC控制器部件”、“Tk GUI MVC视觉部件”)。感谢Bryan发表您的意见。Tkinter上最强大的功能是IMHO模型视觉控制器分离平面的分层抽象(在
.mainloop()
-scope())上的内部和全局)+事件路由(在两个作用域上)。能够独立思考,使得草图设计方法能够无缝地工作,而不仅仅是
.grid()
服务,也可以在
.place()
中工作,这使得智能、可缩放、舒适和可管理的UI方案具有最大的自由度。
 master.bind( '<Configure>', aResizeCallbackHANDLER( ) )  # MVC-Controller Part TRIGGER

 def aResizeCallbackHANDLER( self, anEvent ):             # Reactor:
     # inspect <anEvent>.{}                               # .bind()-bound actor
     # and     <anEvent>.widget.{}                        # details from
     # incl.   <anEvent>.widget.<Tree-sub-element>.{}     # Tk-GUI-MVC-Model Part
     #
     #         <anEvent>.widget      <-- system-assigned <widget>-instance
     #                  .height      on-{ <Configure> }
     #                  .width       on-{ <Configure> }
     #                  .serial      <-- system-assigned Integer
     #                  .time        <-- system-assigned Integer ( .inc each msec )
     # .
     # ..
     # ...
     # Act upon changes and enforce new, re-calculated values
     #                      into sub-ordinated geometry
     # ...
     #