Text 指定两个“嵌入”的相对宽度;参赛作品;内;“文本”;小装置

Text 指定两个“嵌入”的相对宽度;参赛作品;内;“文本”;小装置,text,tkinter,width,tkinter-entry,Text,Tkinter,Width,Tkinter Entry,我在Linux和Windows上指定条目小部件大小时遇到问题。这些条目是在Linux上创建的: 在Linux上,它们在文本小部件中看起来很好。有两个输入单元格,分别使用以下代码行创建: tk.条目(主条目,宽度=16) 宽度指定为16个字符长 但是,在Windows上,单元格只占用一半的空间,我必须指定宽度为22,因为Windows上的字体大小较小 我的问题是:有没有办法在文本小部件中指定这两个单元格的相对宽度,使每个单元格占据父小部件的1/2 在文本小部件中?不,没有对相对宽度的直接支持。

我在Linux和Windows上指定条目小部件大小时遇到问题。这些条目是在Linux上创建的:

在Linux上,它们在文本小部件中看起来很好。有两个输入单元格,分别使用以下代码行创建:

tk.条目(主条目,宽度=16)

宽度指定为16个字符长

但是,在Windows上,单元格只占用一半的空间,我必须指定宽度为22,因为Windows上的字体大小较小


我的问题是:有没有办法在文本小部件中指定这两个单元格的相对宽度,使每个单元格占据父小部件的1/2

在文本小部件中?不,没有对相对宽度的直接支持。在一个框架内?对如果你把它们放在一个文本小部件中(我想,这样你可以滚动它们),你必须自己管理宽度。您可以向文本小部件的
事件添加绑定。当文本小部件更改大小时,会触发此命令,您可以在该点调整所有小部件的大小

最简单的方法是使用
grid
将它们放在一个框架中,然后将框架放在画布中,这样您就可以滚动它了

下面是一个例子:

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.canvas = tk.Canvas(self, width=200, highlightthickness=0)
        self.vsb = tk.Scrollbar(orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)

        self.container = tk.Frame(self.canvas, borderwidth=0, highlightthickness=0)
        self.container.grid_columnconfigure(0, weight=1)
        self.container.grid_columnconfigure(1, weight=1)
        for i in range(30):
            e1 = tk.Entry(self.container)
            e2 = tk.Entry(self.container)
            e1.grid(row=i, column=0,sticky="ew")
            e2.grid(row=i, column=1,sticky="ew")
            e1.insert(0, "find %s" % i)
            e2.insert(0, "replace %s" % i)

        self.canvas.create_window((0,0), anchor="nw", window=self.container, tags="container")
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))
        self.canvas.bind("<Configure>", self.OnCanvasConfigure)

    def OnCanvasConfigure(self, event):
        self.canvas.itemconfigure("container", width=event.width)
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()
将Tkinter作为tk导入
类SampleApp(tk.tk):
定义初始化(self,*args,**kwargs):
tk.tk.\uuuuu初始化(self,*args,**kwargs)
self.canvas=tk.canvas(self,宽度=200,高亮厚度=0)
self.vsb=tk.Scrollbar(orient=“vertical”,command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
自包装(side=“right”,fill=“y”)
self.canvas.pack(side=“left”,fill=“both”,expand=True)
self.container=tk.Frame(self.canvas,borderwidth=0,highlightthickness=0)
self.container.grid\u columnconfigure(0,权重=1)
self.container.grid\u column配置(1,权重=1)
对于范围(30)内的i:
e1=tk.入口(自容器)
e2=tk.Entry(self.container)
e1.网格(行=i,列=0,sticky=“ew”)
e2.网格(行=i,列=1,sticky=“ew”)
e1.插入(0,“查找%s”%i)
e2.插入(0,“替换%s”%i)
self.canvas.create_窗口((0,0),anchor=“nw”,window=self.container,tags=“container”)
self.canvas.configure(scrollregion=self.canvas.bbox(“全部”))
self.canvas.bind(“,self.OnCanvasConfigure)
def OnCanvasConfigure(自我、事件):
self.canvas.itemconfigure(“容器”,宽度=event.width)
self.canvas.configure(scrollregion=self.canvas.bbox(“全部”))
如果名称=“\uuuuu main\uuuuuuuu”:
app=SampleApp()
app.mainloop()

在文本小部件中?不,没有对相对宽度的直接支持。在一个框架内?对如果你把它们放在一个文本小部件中(我想,这样你可以滚动它们),你必须自己管理宽度。您可以向文本小部件的
事件添加绑定。当文本小部件更改大小时,会触发此命令,您可以在该点调整所有小部件的大小

最简单的方法是使用
grid
将它们放在一个框架中,然后将框架放在画布中,这样您就可以滚动它了

下面是一个例子:

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.canvas = tk.Canvas(self, width=200, highlightthickness=0)
        self.vsb = tk.Scrollbar(orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)

        self.container = tk.Frame(self.canvas, borderwidth=0, highlightthickness=0)
        self.container.grid_columnconfigure(0, weight=1)
        self.container.grid_columnconfigure(1, weight=1)
        for i in range(30):
            e1 = tk.Entry(self.container)
            e2 = tk.Entry(self.container)
            e1.grid(row=i, column=0,sticky="ew")
            e2.grid(row=i, column=1,sticky="ew")
            e1.insert(0, "find %s" % i)
            e2.insert(0, "replace %s" % i)

        self.canvas.create_window((0,0), anchor="nw", window=self.container, tags="container")
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))
        self.canvas.bind("<Configure>", self.OnCanvasConfigure)

    def OnCanvasConfigure(self, event):
        self.canvas.itemconfigure("container", width=event.width)
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()
将Tkinter作为tk导入
类SampleApp(tk.tk):
定义初始化(self,*args,**kwargs):
tk.tk.\uuuuu初始化(self,*args,**kwargs)
self.canvas=tk.canvas(self,宽度=200,高亮厚度=0)
self.vsb=tk.Scrollbar(orient=“vertical”,command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
自包装(side=“right”,fill=“y”)
self.canvas.pack(side=“left”,fill=“both”,expand=True)
self.container=tk.Frame(self.canvas,borderwidth=0,highlightthickness=0)
self.container.grid\u columnconfigure(0,权重=1)
self.container.grid\u column配置(1,权重=1)
对于范围(30)内的i:
e1=tk.入口(自容器)
e2=tk.Entry(self.container)
e1.网格(行=i,列=0,sticky=“ew”)
e2.网格(行=i,列=1,sticky=“ew”)
e1.插入(0,“查找%s”%i)
e2.插入(0,“替换%s”%i)
self.canvas.create_窗口((0,0),anchor=“nw”,window=self.container,tags=“container”)
self.canvas.configure(scrollregion=self.canvas.bbox(“全部”))
self.canvas.bind(“,self.OnCanvasConfigure)
def OnCanvasConfigure(自我、事件):
self.canvas.itemconfigure(“容器”,宽度=event.width)
self.canvas.configure(scrollregion=self.canvas.bbox(“全部”))
如果名称=“\uuuuu main\uuuuuuuu”:
app=SampleApp()
app.mainloop()
谢谢,布莱恩-再次:)我真的很难使用这个小部件,但我希望现在我所需要的已经完成。谢谢,布莱恩-再次:)我真的很难使用这个小部件,但我希望现在我所需要的已经完成。