B-L
B-L

Reputation: 144

Python tkiner, two text boxes with x and y scrollbars for both

I am trying to make a gui that has two separate text outputs with horizontal and vertical scollbars for each text box that are fixed to the right and bottom edges of each respective text windows. I am struggling with how to do this with the tkinter grid and any help would be appreciated.

import tkinter as tk


class WeatherGUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)


        # Horizontal (x) Scroll bar
        self.xscrollbar = tk.Scrollbar(self, orient="horizontal")
        self.xscrollbar.grid(column=5, row=10, sticky="we")

        # Vertical (y) Scroll Bar
        self.yscrollbar = tk.Scrollbar(self)
        self.yscrollbar.grid(column=5, row=10, sticky='ns')

        self.xscrollbar2 = tk.Scrollbar(self, orient="horizontal")
        self.xscrollbar2.grid(column=9, row=10, sticky="we")

        # Vertical (y) Scroll Bar
        self.yscrollbar2 = tk.Scrollbar(self)
        self.yscrollbar2.grid(column=9, row=10, sticky='ns')


        self.NSW_actual_text = tk.Text(self, width=50, wrap = "none", xscrollcommand=self.xscrollbar.set, yscrollcommand=self.yscrollbar.set,)
        self.NSW_actual_text.grid(column=0, columnspan=4, row= 8,padx=(20, 10))

        self.NSW_forecast_text = tk.Text(self, width=50, wrap = "none", xscrollcommand=self.xscrollbar.set, yscrollcommand=self.yscrollbar.set)
        self.NSW_forecast_text.grid(column=8, columnspan=4, row= 8,padx=(20, 10))

        self.xscrollbar.config(command=self.NSW_actual_text.xview)
        self.yscrollbar.config(command=self.NSW_actual_text.yview)


        self.xscrollbar2.config(command=self.NSW_forecast_text.xview)
        self.yscrollbar2.config(command=self.NSW_forecast_text.yview)



        self.btn1 = tk.Button(self, text="Generate NWS Actual", command=self.GenerateNWSActual)
        self.btn1.grid(column=1, row=0)


        self.btn2 = tk.Button(self, text="Generate NWS Forecast", command=self.GenerateNWSForecast)
        self.btn2.grid(column=10, row=0)


    def GenerateNWSActual(self):
        self.NSW_actual_text.insert('1.0', "This is where actual weather would go")


    def GenerateNWSForecast(self):
        self.NSW_forecast_text.insert('1.0', "this is where forecast weather would go")




app = WeatherGUI()
app.mainloop()

Upvotes: 1

Views: 625

Answers (1)

RafD
RafD

Reputation: 65

The following example allows you to attach two functional scrollbars (x, y) to a Text widget

from tkinter import *
# Create Window
root = Tk()
# Create ScrollBars
xScrollbar = Scrollbar(root, orient=HORIZONTAL) 
yScrollbar = Scrollbar(root, orient=VERTICAL)
# Create Text Widget with scroll commands
TextWidget = Text(root, xscrollcommand=xScrollbar, yscrollcommand=yScrollbar)
# Package Componets
xScrollbar.pack(side=BOTTOM, fill=X)
yScrollbar.pack(side=RIGHT, fill=Y)
TextWidget.pack(fill=BOTH, expand=20)
# Assign Scrollbars with TextWidget
xScollbar.config(command=TextWidget.xview)
yScollbar.config(command=TextWidget.yview)

You can use this examble for both of your TextWidgets in your weather application.

Upvotes: 1

Related Questions