如果我创建一个文本框并使用长于文本框宽度的文本填充它,则滚动条可以正常工作。 像这样:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
vbar = ttk.Scrollbar(root, orient="horizontal")
vbar.grid(column=0, row=2, sticky="NWSE")
text_box = tk.Text(root, width=50, height=30, xscrollcommand=vbar.set, wrap=tk.NONE)
text_box.grid(column=0, row=0, padx=(5, 5))
text_box.grid_propagate(0)
vbar.config(command=text_box.xview)
for n in range(0, 60):
text_box.insert(tk.END,"*")
root.mainloop()
但是我想在这个主文本框中插入文本框并水平滚动它们。它插入了两个文本框但滚动条未激活,因此我无法查看第三个文本框。我不希望文本框扩展以容纳嵌套文本框,因此text_box.grid_propagate(0)
有没有办法做到这一点?
这是代码。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
vbar = ttk.Scrollbar(root, orient="horizontal")
vbar.grid(column=0, row=2, sticky="NWSE")
text_box = tk.Text(root, width=50, height=30, xscrollcommand=vbar.set, wrap=tk.NONE)
text_box.grid(column=0, row=0, padx=(5, 5))
text_box.grid_propagate(0)
vbar.config(command=text_box.xview)
tweet_windows = ["Window 1", "Window 2", "Window 3"]
for n in range(0, len(tweet_windows)):
tweet_windows[n] = tk.Text(text_box, width=23)
tweet_windows[n].grid(column=n, row=1)
root.mainloop()
答案 0 :(得分:1)
好的,我想出来了。您需要生成嵌套所需的文本小部件的数量,而不是grid
它们。然后使用主文本小部件的.create_window
方法将它们放在主文本小部件中。可以通常的方式引用和更新嵌套的小部件。
这是代码。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
vbar = ttk.Scrollbar(root, orient="horizontal")
vbar.grid(column=0, row=2, sticky="NWSE")
text_box = tk.Text(root, width=50, height=30, xscrollcommand=vbar.set, wrap=tk.NONE)
text_box.grid(column=0, row=0, padx=(5, 5))
text_box.grid_propagate(0)
vbar.config(command=text_box.xview)
text1 = tk.Text(width=23)
text1.insert(tk.END, "test")
text2 = tk.Text(width=23)
text2.insert(tk.END, "test2")
text3 = tk.Text(width=23)
text3.insert(tk.END, "test3")
text_box.window_create(tk.END, window=text1)
text_box.window_create(tk.END, window=text2)
text_box.window_create(tk.END, window=text3)
text3.insert(tk.END, "\nMore text")
root.mainloop()