tkinter:简单的可滚动文本

时间:2014-11-17 18:17:07

标签: python user-interface tkinter label scrollbar

问题

我正在尝试制作一个'ttk Label',其中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()

修改

当前结果

enter image description here

1 个答案:

答案 0 :(得分:2)

答案

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

代码

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

结果

enter image description here