Горизонтальные и вертикальные полосы прокрутки с использованием TKinter и Python почти работаютPython

Программы на Python
Ответить
Anonymous
 Горизонтальные и вертикальные полосы прокрутки с использованием TKinter и Python почти работают

Сообщение Anonymous »

Я хотел впервые попробовать использовать tkinter, и у меня была небольшая программа, которую я хотел попробовать.
Ей нужен был текст в «таблице», а из-за количества строк и столбцов мне нужны были полосы прокрутки для вертикальной и горизонтальной прокрутки.
Я взял два примера из https://pythonguides.com/python-tkinter-scrollbar/ и попытался объединить их, чтобы эффективно получить первый пример, с дополнительными столбцы и горизонтальную полосу прокрутки.
Все работает отлично, за исключением того, что горизонтальная полоса прокрутки не проходит по всей нижней части холста, а фиксируется в правом нижнем углу.
Я не могу понять, что я сделал не так, но буду очень признателен за любые рекомендации.

Код: Выделить всё

#!/usr/bin/python3

import tkinter as tk

root = tk.Tk()
root.title("Customer Data")

# Create a canvas and scrollbar
canvas = tk.Canvas(root)
vertScrollbar = tk.Scrollbar(root, orient=tk.VERTICAL, command=canvas.yview)
horzScrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL, command=canvas.xview)
# canvas.configure(yscrollcommand=vertScrollbar.set, xscrollcommand=horzScrollbar.set)

#############

canvas.config(
xscrollcommand=horzScrollbar.set,
yscrollcommand=vertScrollbar.set
)

#############

# Create a frame inside the canvas
frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=frame, anchor='nw')

# Add table headers
headers = ['Name', 'Email', 'Phone', 'Location', 'Animal']
for col, header in enumerate(headers):
tk.Label(frame, text=header, font=('Arial', 12, 'bold')).grid(row=0, column=col, padx=10, pady=5)

# Add customer data to the table
customers = [
('John Doe'  , 'john@example.com', '(123) 456-7890', 'Williamstown, Washington', 'Elephant'),
('Jane Smith', 'jane@example.com', '(987) 654-3210', 'Williamstown, Washington', 'Elephant'),
('Jane Smith', 'jane@example.com', '(987) 654-3211', 'Williamstown, Washington', 'Elephant'),
('Jane Smith', 'jane@example.com', '(987) 654-3212', 'Williamstown, Washington', 'Elephant'),
('Jane Smith', 'jane@example.com', '(987) 654-3213', 'Williamstown, Washington', 'Elephant'),
# Add more customer data here
]

for row, customer in enumerate(customers, start=1):
for col, item in enumerate(customer):
tk.Label(frame, text=item).grid(row=row, column=col, padx=10, pady=5)

# Update the scroll region
frame.update_idletasks()
canvas.configure(scrollregion=canvas.bbox('all'))

canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
vertScrollbar.pack(side=tk.RIGHT, fill=tk.Y)
horzScrollbar.pack(side=tk.BOTTOM, fill=tk.X)

root.mainloop()
Большое спасибо за ответ @Seýdilla Gurbangeldiýew.
Я создал новый файл и дословно скопировал ваш ответ, но он завис.
Когда мне удалось выйти, я получил ошибку

Код: Выделить всё

import-im6.q16: attempt to perform an operation not allowed by the security policy `PS' @ error/constitute.c/IsCoderAuthorized/426.
./fil2.py: line 9: syntax error near unexpected token `('
./fil2.py: line 9: `root = tk.Tk()'
что я не понял, поэтому попытался скопировать строки, которые отличались от моего кода:

Код: Выделить всё

# Container for canvas and vertical scrollbar
container = tk.Frame(root)
container.pack(fill="both", expand=True)

canvas = tk.Canvas(container)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

vertScrollbar = tk.Scrollbar(container, orient=tk.VERTICAL, command=canvas.yview)
vertScrollbar.pack(side=tk.RIGHT, fill=tk.Y)

horzScrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL, command=canvas.xview)
horzScrollbar.pack(side=tk.BOTTOM, fill=tk.X)

'''
# Create a canvas and scrollbar
canvas = tk.Canvas(root)
vertScrollbar = tk.Scrollbar(root, orient=tk.VERTICAL, command=canvas.yview)
horzScrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL, command=canvas.xview)
# canvas.configure(yscrollcommand=vertScrollbar.set, xscrollcommand=horzScrollbar.set)
'''
И это почти сработало!
Теперь происходит следующее: изначально горизонтальная полоса прокрутки появляется, но когда я изменяю размер программы, так что горизонтальная полоса прокрутки не нужна, она исчезает, но не возвращается, когда это необходимо.
Мои извинения...
Ваша помощь будет очень признательна!>

Подробнее здесь: https://stackoverflow.com/questions/798 ... st-working
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»