【问题标题】:Making a rectangle border around text in Textbox python tkinter在文本框python tkinter中围绕文本制作矩形边框
【发布时间】:2022-07-23 00:09:17
【问题描述】:

我想在某些文本周围有一个矩形边框,该边框从末尾添加到文本框并将放置在中心。

例如:

很遗憾,我找不到这样做的方法,因为我 不知道如何将文本放置在文本框中的行中心,也不知道如何用矩形包围文本。

【问题讨论】:

    标签: python tkinter textbox tkinter-canvas tkinter-text


    【解决方案1】:

    您可以在Text 小部件中使用justify='center' 将带有空格和换行符之间边框的Label 包裹起来。

    下面是一个例子:

    import tkinter as tk
    
    root = tk.Tk()
    
    textbox = tk.Text(root, width=30, height=10)
    textbox.pack()
    
    textbox.tag_config('center', justify='center')
    
    def center_label(textbox, **kwargs):
        textbox.insert('end', ' ', 'center')
        lbl = tk.Label(textbox, bd=3, relief='solid', **kwargs)
        textbox.window_create('end', window=lbl)
        textbox.insert('end', '\n\n')
    
    center_label(textbox, text='hello', width=10, font='Arial 12 bold')
    center_label(textbox, text='............', width=20)
    
    textbox.insert('end', '\nhello\n')
    
    root.mainloop()
    

    结果:

    【讨论】:

    • 哇!看起来不错!!!如何为框架添加背景颜色?
    • 你是说边框的颜色吗?
    • 不,我指的是框架的内部。
    • bg=... 添加到center_label(...)
    • 不要指定width 选项。
    【解决方案2】:

    尝试将文本框放入它自己的框架中。

    类似这样的事情:

    from Tkinter import *
    root = Tk()
    
    labelframe = LabelFrame(root, text="LabelFrame")
    labelframe.pack()
    
    text = Label(labelframe, text="Text inside labelframe")
    text.pack()
    
    root.mainloop()
    

    【讨论】:

    • 我还是不明白如何在文本框中添加带有矩形的文本。
    • 框架将充当围绕文本的矩形
    • 你能告诉我你是怎么用文本框做的吗?因为从你写的内容我真的看不出怎么做。
    • 我提供的代码告诉你如何创建一个框架以及如何将它们放入其中。如果您愿意,可以阅读有关框架的这篇文章。 tutorialspoint.com/python/tk_frame.htm
    【解决方案3】:

    您可以使用relief = "solid" 为条目添加边框,使用outline 使文本居中,您可以使用grid 以您想要的方式对齐小部件。

    import tkinter as tk
    
    root = tk.Tk()
    root.geometry("400x200")
    root.grid_columnconfigure(0, weight = 1)
    
    ent1 = tk.Entry(root, relief = "solid", justify = "center")
    ent1.insert(0, "hello")
    ent1.grid(row = 0, column = 0, pady = 10)
    
    ent2 = tk.Entry(root, relief = "solid", justify = "center")
    ent2.insert(0, ".......")
    ent2.grid(row = 1, column = 0, pady = 10)
    
    lab1 = tk.Label(root, text = "hello")
    lab1.grid(row = 2, column = 0, sticky = "w")
    
    lab2 = tk.Label(root, text = "hello")
    lab2.grid(row = 3, column = 0, sticky = "w")
    
    root.mainloop()
    

    大部分内容都很简单,root.grid_columnconfigure 行通过将第一列的权重设为 1,使网格占据了根窗口的整个宽度。结果与您的示例非常相似:
    @987654321 @

    【讨论】:

    • 但重点是将它与文本框的文本结合起来
    • 也许有办法在文本框中添加标签配置,让文本被一个矩形包围?
    • 文本框是什么意思?条目还是标签?如果你只是想把所有东西都放在一个有边框的框架(一个盒子)里,那是可能的。
    • 这两个,我的意思是Text,都不是可以添加文本的文本块。
    • tutorialspoint.com/python/tk_text.htm 看到这个...我能够使用 JUSTIFY 和 tag_configure 在中心插入文本,但无法在我插入的文本周围插入矩形。如果在帖子中不清楚,我可以添加它。
    【解决方案4】:

    您可以使用text.window_create() 在文本框中创建一个Entry 小部件。您可以自定义 Entry 小部件的边框,并且可以在其中输入文本。为了使它看起来更像文本框的一部分,您应该注册事件,以便当用户按下 Right 并且插入符号是 Entry 左侧的一个字符时,使用 @987654326 给 Entry 焦点@。你可以对 Left 做同样的事情。

    【讨论】:

      猜你喜欢
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      相关资源
      最近更新 更多