Я пытаюсь реализовать полосу прокрутки внутри более крупной программы. Я столкнулся с некоторыми проблемами AtrributeError. Итак, чтобы исправить это, я сделал более простой код, который показан ниже.
-Полоса прокрутки должна прокручивать холст горизонтально, а не текстовый виджет.
-Эта более простая программа имеет только 2 виджета tk.Text (склеенных с помощью 'side="left"
')
-Большая программа имеет 18 тк.Текст, поэтому мне очень нужна горизонтальная полоса прокрутки
-Мне тоже возникают некоторые проблемы с холстом, так как текстовые виджеты не находятся внутри холста.
Я пробовал некоторые решения, которые уже существуют, но есть некоторые программы разногласий, которые я не могу прочитать очень хорошо (так как я не профессионал в tkinter). Может кто-нибудь, пожалуйста, помогите мне, чего не хватает в моем коде, чтобы этот AtrributeError исчез?
Мне нужны tk.Texts внутри холста, а сам холст прокручивается
EDIT1: Теперь программаэто так, но полоса прокрутки не прокручивается
import tkinter as tk
from tkinter import ttk
class Test(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.canvas = tk.Canvas(master)
self.canvas.pack(side='top')
self.frame = ttk.Frame(self.canvas)
self.frame.pack(side='bottom', fill='x', expand=True)
self.text = tk.Text(self.canvas, width= 5).pack(side='left')
self.text2 = tk.Text(self.canvas, width=5).pack(side='left')
self.text3 = tk.Text(self.canvas, width=5).pack(side='left')
self.text4 = tk.Text(self.canvas, width=5).pack(side='left')
self.text5 = tk.Text(self.canvas, width=5).pack(side='left')
self.text6 = tk.Text(self.canvas, width=5).pack(side='left')
self.text7 = tk.Text(self.canvas, width=5).pack(side='left')
self.text8 = tk.Text(self.canvas, width=5).pack(side='left')
self.scroll = ttk.Scrollbar(self.frame, orient='horizontal', command=self.canvas.xview)
self.scroll.pack(side='bottom', fill='x')
self.canvas['xscrollcommand'] = self.scroll
self.canvas["scrollregion"] = self.canvas.bbox('all')
root = tk.Tk()
root.geometry('100x300')
test = Test(root)
root.mainloop()