如何在tkinter中将xscrollbar添加到Text小部件

dil*_*ten 3 python tkinter

根据这个来源:x和y滚动条都可以添加到tkinter的Text()小部件中.在程序方法中使用的代码是:

from tkinter import *
root = Tk()

frame = Frame(master, bd=2, relief=SUNKEN)

frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)

xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
xscrollbar.grid(row=1, column=0, sticky=E+W)

yscrollbar = Scrollbar(frame)
yscrollbar.grid(row=0, column=1, sticky=N+S)

text = Text(frame, wrap=NONE, bd=0,
        xscrollcommand=xscrollbar.set,
        yscrollcommand=yscrollbar.set)

text.grid(row=0, column=0, sticky=N+S+E+W)

xscrollbar.config(command=text.xview)
yscrollbar.config(command=text.yview)

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

但是,我选择了类方法并编写了下面的代码,根据以下代码,y滚动条工作,但x滚动条不起作用.为什么x滚动条在这个例子中不起作用?

import tkinter as tk


 class App(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)

        self.x_scrollbar = tk.Scrollbar(master=self, orient="horizontal")
        self.x_scrollbar.grid(row=1, column=0, sticky="w, e")

        self.y_scrollbar = tk.Scrollbar(master=self)
        self.y_scrollbar.grid(row=0, column=1, sticky="n, s")

        self.text = tk.Text(master=self, width=100, height=25, bg="black", fg="white", wrap=None)
        self.text.grid(row=0, column=0, sticky="n, s, e, w")

        self.configure_widgets()
        self.pack()

    def configure_widgets(self):
        self.text.configure(xscrollcommand=self.x_scrollbar.set, yscrollcommand=self.y_scrollbar.set)
        self.x_scrollbar.config(command=self.text.xview)
        self.y_scrollbar.config(command=self.text.yview)

if __name__ == "__main__":
    root = tk.Tk()
    app = App(master=root)
    app.mainloop()
Run Code Online (Sandbox Code Playgroud)

Mik*_*SMT 5

这里的问题不是滚动条代码,而是None文本框的包装配置的分配.

更改

wrap=None
Run Code Online (Sandbox Code Playgroud)

wrap='none'
Run Code Online (Sandbox Code Playgroud)

在一个无关的说明

更改sticky="n, s, e, w"sticky="nsew"逗号在这里引用的任何内容都没有.而你的其他应该是"we""ns"

您可能一直在尝试使用tkinter CONSTANTS版本的棒.这看起来像这样: sticky=(N, S, E, W).但是因为你没有导入*这将无法正常工作.您可以单独从tkinter导入每个常量,但在这种情况下最好使用它sticky="nsew".

这里仅供参考,是从'nsew'导入时获得的常量列表*tkinter

N='n'
S='s'
W='w'
E='e'
NW='nw'
SW='sw'
NE='ne'
SE='se'
NS='ns'
EW='ew'
NSEW='nsew'
Run Code Online (Sandbox Code Playgroud)