【发布时间】:2022-07-23 00:09:17
【问题描述】:
【问题讨论】:
标签: python tkinter textbox tkinter-canvas tkinter-text
【问题讨论】:
标签: python tkinter textbox tkinter-canvas tkinter-text
您可以在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 选项。
尝试将文本框放入它自己的框架中。
类似这样的事情:
from Tkinter import *
root = Tk()
labelframe = LabelFrame(root, text="LabelFrame")
labelframe.pack()
text = Label(labelframe, text="Text inside labelframe")
text.pack()
root.mainloop()
【讨论】:
您可以使用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.window_create() 在文本框中创建一个Entry 小部件。您可以自定义 Entry 小部件的边框,并且可以在其中输入文本。为了使它看起来更像文本框的一部分,您应该注册事件,以便当用户按下 Right 并且插入符号是 Entry 左侧的一个字符时,使用 @987654326 给 Entry 焦点@。你可以对 Left 做同样的事情。
【讨论】: