2017-06-20 1 views
3

Entsprechend this source: beide x und y scrollbars können dem Text() Widget von tkinter hinzugefügt werden. Die Codes, die in Verfahrensweise arbeiten, sind:Wie man eine xscrollbar zum Textwidget in tkinter hinzufügt

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

aber ich wähle die Klassenmethode und schrieb die folgenden Codes, gemäß den unten Codes y Scrollbar funktioniert, aber x Scrollbar funktioniert nicht. Warum funktioniert die Bildlaufleiste nicht in diesem Beispiel?

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

Antwort

5

Das Problem hier ist nicht der Scrollbar-Code, sondern die Zuordnung von None in Wrap-Konfiguration Ihres Textbox.

ändern

wrap=None 

Um

wrap='none' 

auf einem nicht verwandten Notiz

Änderung sticky="n, s, e, w"-sticky="nsew" bedeuten die Kommas nichts in einem hier zitieren. Und Ihre anderen Stickys sollten "we" und "ns" sein

Sie könnten versucht haben, die tkinter CONSTANTS Version des Sticks zu tun. Das würde so aussehen: sticky=(N, S, E, W). Da Sie jedoch * nicht importiert haben, funktioniert das nicht. Sie können jede Konstante von tkinter einzeln importieren, aber in diesem Fall ist es am besten, stattdessen sticky="nsew" zu verwenden.

Gerade als Referenz hier ist eine Liste der 'nsew' Konstanten, die Sie erhalten, wenn Sie * von tkinter

N='n' 
S='s' 
W='w' 
E='e' 
NW='nw' 
SW='sw' 
NE='ne' 
SE='se' 
NS='ns' 
EW='ew' 
NSEW='nsew' 
+0

importieren Oh, danke, das Problem gelöst ist. –

+0

Auch ich habe die klebrigen Namen geändert, danke nochmal. –

+0

Gut zu helfen. Wenn diese Antwort für Sie funktioniert, sollten Sie das Kontrollkästchen neben meiner Antwort aktivieren. –

Verwandte Themen