Как заставить полосу прокрутки Tkinter правильно прокручивать оконную рамку кнопок, чтобы все кнопки были видимыми/нажимPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить полосу прокрутки Tkinter правильно прокручивать оконную рамку кнопок, чтобы все кнопки были видимыми/нажим

Сообщение Anonymous »

У меня возникла проблема с правильным просмотром большой (643) рамки кнопок.
У меня были и другие проблемы, например.
  • Обучение сделать кнопки прокручиваемыми,
    Это я исправил, научившись использовать для этого Canvas.create_window.
  • Содержимое указанного холста окно вылетает в стороны с боков

    кнопки вытекание за пределы холста
    Это я исправил, разместив холст во фрейме верхнего уровня вместо корневого окна.
Но теперь, когда я зашел в тупик с возможностью просмотра и использования всего, я не хочу прибегать к списку вкладок ttk-блокнота, так как это кажется грубым.
Похоже, проблема является подсектором проблемы 2, поскольку кнопки рендерятся в зависимости от размера моего экрана, и это само по себе, кажется, некоторых беспокоит.
меньшее дополнение к этой проблеме, похоже, заключается в том, что полоса прокрутки оставляет много места оставляя массу места для использования, я опубликую ответ на свой вопрос, если найду его. Обычно я не задаю вопросы, но оставить след для будущих разработчиков было бы неплохо.
Снимок экрана ниже
[img]https:// i.sstatic.net/grGUa.png[/img]

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

import tkinter as tk
from tkinter import BOTH, BOTTOM, LEFT, RIGHT, TOP, X, Y, Button, Canvas, Frame, Tk
import matplotlib
import tkinter.ttk as ttk
import sys
# caution: path[0] is reserved for script path (or '' in REPL)
sys.path.insert(1, "/home/will/Projects/CoinBaseADVtrade_Data")

import Data

class GUI(Tk):

def __init__(self):
super().__init__()

self.top_frame = Frame(self)
self.top_frame.pack(side=TOP, )
self.canvas = Canvas(self.top_frame, bg="Black",width=177)
self.frame = Frame(self.top_frame,height=20,width=400)
self.vsb = tk.Scrollbar(self.top_frame, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side=RIGHT, fill=Y)
self.canvas.pack(side=TOP,)
self.canvas.create_window((0,0),window=self.frame,anchor="n")

self.frame.bind("", lambda event, canvas=self.canvas: canvas.configure(scrollregion=canvas.bbox("all")))
self.populate(self.frame)

def populate(self,frame):
products = Data.Products().list_products()
for i in range(len(products)):
print(products.iloc[i].name)
Button(frame,height =5,width = 20,text=products.iloc[i].name).pack(side=TOP, padx=5,pady=3)
pass

GUI().mainloop()

Я пробовал такие вещи, как представление Y. Лучше удерживать холст
, но ни одно из решений не дало никаких результатов и привело к путанице в моем коде.


Подробнее здесь: https://stackoverflow.com/questions/778 ... of-buttons
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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