一旦文本出现在屏幕之外,pythontk滚动条将变为非活动状态

2024-09-30 03:23:59 发布

您现在位置:Python中文网/ 问答频道 /正文

每当我在框中填充文本时,水平滚动条工作正常,直到文本显示在屏幕上。在

image1

但是,如果行数大于屏幕上显示的行数,而我向下滚动文本,则水平滚动条将变为非活动状态,直到文本太长而无法再容纳一行时为止

image2

以下是我的基本代码:

from Tkinter import *
import Tkinter,tkFileDialog, tkFont

w = Label(root, text="Hello, world!")
w.pack()


textfr=Frame(root)
t=Text(textfr, width=100, height=10,font=("Arial",12),wrap=NONE)
t.insert('1.0', 'here is my text to insert')

Yscroll=Scrollbar(textfr, orient=VERTICAL)
Xscroll=Scrollbar(textfr, orient=HORIZONTAL)

t.configure(yscrollcommand=Yscroll.set)
t.configure(xscrollcommand=Xscroll.set)

Yscroll.config(command=t.yview)
Xscroll.config(command=t.xview)


        #pack everything

Yscroll.pack(side=RIGHT,fill=Y)
Xscroll.pack(side=BOTTOM,fill=X)
t.pack(side=LEFT, fill=BOTH, expand=TRUE)
textfr.pack(side=TOP, fill=BOTH, expand=TRUE)


root.mainloop()

唉,我找不到/google合适的解决方案,尽管这个问题很简单

有什么想法吗?在


Tags: text文本import屏幕tkinter水平rootfill
1条回答
网友
1楼 · 发布于 2024-09-30 03:23:59
from Tkinter import *

class AutoScrollbar(Scrollbar):
    # a scrollbar that hides itself if it's not needed.  only
    # works if you use the grid geometry manager.
    def set(self, lo, hi):
        if float(lo) <= 0.0 and float(hi) >= 1.0:
            # grid_remove is currently missing from Tkinter!
            self.tk.call("grid", "remove", self)
        else:
            self.grid()
        Scrollbar.set(self, lo, hi)
    def pack(self, **kw):
        raise TclError, "cannot use pack with this widget"
    def place(self, **kw):
        raise TclError, "cannot use place with this widget"


root = Tk()

vscrollbar = AutoScrollbar(root)
vscrollbar.grid(row=0, column=1, sticky=N+S)
hscrollbar = AutoScrollbar(root, orient=HORIZONTAL)
hscrollbar.grid(row=1, column=0, sticky=E+W)

canvas = Canvas(root,
                yscrollcommand=vscrollbar.set,
                xscrollcommand=hscrollbar.set)
canvas.grid(row=0, column=0, sticky=N+S+E+W)

vscrollbar.config(command=canvas.yview)
hscrollbar.config(command=canvas.xview)

# make the canvas expandable
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

#
# create canvas contents

frame = Frame(canvas)
frame.rowconfigure(1, weight=1)
frame.columnconfigure(1, weight=1)

rows = 20
for i in range(1,rows):
    for j in range(1,50):
        button = Button(frame, padx=7, pady=7, text="[%d,%d]" % (i,j))
        button.grid(row=i, column=j, sticky='news')

canvas.create_window(0, 0, anchor=NW, window=frame)

frame.update_idletasks()

canvas.config(scrollregion=canvas.bbox("all"))

root.mainloop()

这只是一个使用按钮的简单示例。更改for循环的range()语句中的数字以了解它的含义,您应该能够根据自己的需要调整此代码,希望这有帮助。在

相关问题 更多 >

    热门问题