一旦文本在屏幕外,Python tk滚动条将变为非活动状态 [英] Python tk scrollbar becomes inactive once text is outside the screen

查看:110
本文介绍了一旦文本在屏幕外,Python tk滚动条将变为非活动状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每当我用文本填充方框时,水平滚动条就可以正常工作,直到在屏幕上看到文本为止.

Whenever I'm filling the box with text, horizontal scrollbar work fine until the text is seen on the screen.

但是,如果行数大于屏幕上显示的行数,并且我向下滚动文本,则水平滚动条会变得无效,直到文本太长而无法再次容纳一行

However if the number of lines is greater than can be seen on the screen and I scroll the text down, the horizontal scrollbar becomes inactive up to the point when text is too long to fit one line again

这是我真正的基本代码:

Here's my really basic code:

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

A,即使这个问题确实很基本,我也找不到/谷歌合适的解决方案

Alas I couldn't find/google proper solution, even though the problem is really basic

有什么想法吗?

推荐答案

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()语句中的数字以对此有所了解,您应该能够修改此代码,然后根据自己的需要修改代码,希望对您有所帮助.

This is just a quick example using buttons. Change the numbers in the range() statements of the for loops to get an idea for it, you should be able to adapt this code then your suit yours, hope this helps.

这篇关于一旦文本在屏幕外,Python tk滚动条将变为非活动状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆