tkinter:简单的可滚动文本

Jak*_*evi 3 python user-interface label tkinter scrollbar

我正在尝试制作一个 'ttk 标签',a) 高 20 像素,宽 300 像素,b) 可滚动(在这种情况下是水平的),c)在合理范围内使用最简单的代码(除了文本和滚动条都在一个框架内*)。我发现stackoverflow有助于描述我需要经历的过程(将标签放在框架中,将框架放在画布中,将滚动条放在画布旁边或下方,并以某种方式将它们“绑定”在一起) ,但尽管看了一些文档和 stackoverflow 问题,我还是不明白为什么我的代码不能正常工作。请有人 a) 更新代码以使其满足上述条件,并且 b) 让我知道我是否做了任何不必要的事情?谢谢

*该框架将用于我的一个项目,并带有相关文本

当前代码

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

myframe_outer = ttk.Frame(root)
mycanvas = tk.Canvas(myframe_outer, height=20, width=300)
myframe_inner = ttk.Frame(mycanvas)
myscroll = ttk.Scrollbar(myframe_outer, orient='horizontal', command=mycanvas.xview)
mycanvas.configure(xscrollcommand=myscroll.set)

myframe_outer.grid()
mycanvas.grid(row=1, sticky='nesw')
myscroll.grid(row=2, sticky='ew')
mycanvas.create_window(0, 0, window=myframe_inner, anchor='nw')
ttk.Label(myframe_inner, text='test ' * 30).grid(sticky='w')

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

编辑:

当前结果

在此处输入图片说明

Jak*_*evi 7

回答

使用只读的“条目”小部件 - 它看起来与标签相同,不需要放在画布中。

代码

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

mytext = tk.StringVar(value='test ' * 30)

myframe = ttk.Frame(root)
myentry = ttk.Entry(myframe, textvariable=mytext, state='readonly')
myscroll = ttk.Scrollbar(myframe, orient='horizontal', command=myentry.xview)
myentry.config(xscrollcommand=myscroll.set)

myframe.grid()
myentry.grid(row=1, sticky='ew')
myscroll.grid(row=2, sticky='ew')

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明