如何让文本框水平滚动插入的小部件?

时间:2018-03-10 10:02:24

标签: python tkinter scrollbar

如果我创建一个文本框并使用长于文本框宽度的文本填充它,则滚动条可以正常工作。 像这样:

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()

1 个答案:

答案 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()