>백엔드 개발 >파이썬 튜토리얼 >Tkinter의 위젯 그룹에 스크롤바를 추가하는 방법은 무엇입니까?

Tkinter의 위젯 그룹에 스크롤바를 추가하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 20:25:18860검색

How to Add a Scrollbar to a Group of Widgets in Tkinter?

Tkinter의 위젯 그룹에 스크롤바 추가

개요

Tkinter의 스크롤바 기능은 특정 위젯으로 제한됩니다. 프레임 및 루트 위젯은 제외됩니다. 이 제한을 극복하려면 대체 접근 방식이 필요합니다.

프레임 삽입형 캔버스 접근 방식

  • 캔버스 위젯을 생성하고 스크롤 막대를
  • 다음을 포함하는 프레임 삽입 캔버스 내의 라벨 위젯.
  • 캔버스의 스크롤 영역을 프레임 크기에 맞게 설정합니다.

객체 지향 솔루션

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):

        # Initialize frame
        tk.Frame.__init__(self, parent)

        # Create canvas and scrollbar
        self.canvas = tk.Canvas(self, borderwidth=0, background="#ffffff")
        self.frame = tk.Frame(self.canvas, background="#ffffff")
        self.vsb = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)

        # Pack widgets
        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame")

        # Bind frame's <Configure> event to update scroll region
        self.frame.bind("<Configure>", self.onFrameConfigure)

        # Populate with data
        self.populate()

    def populate(self):
        for row in range(100):
            tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1",
                     relief="solid").grid(row=row, column=0)
            t = "this is the second column for row %s" %row
            tk.Label(self.frame, text=t).grid(row=row, column=1)

    def onFrameConfigure(self, event):
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

if __name__ == "__main__":
    root=tk.Tk()
    example = Example(root)
    example.pack(side="top", fill="both", expand=True)
    root.mainloop()

절차적 해결책

import tkinter as tk

def populate(frame):
    for row in range(100):
        tk.Label(frame, text="%s" % row, width=3, borderwidth="1", 
                 relief="solid").grid(row=row, column=0)
        t = "this is the second column for row %s" %row
        tk.Label(frame, text=t).grid(row=row, column=1)

def onFrameConfigure(canvas):
    canvas.configure(scrollregion=canvas.bbox("all"))

root = tk.Tk()
canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
frame = tk.Frame(canvas, background="#ffffff")
vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)

vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
canvas.create_window((4,4), window=frame, anchor="nw")

frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas))

populate(frame)

root.mainloop()

위 내용은 Tkinter의 위젯 그룹에 스크롤바를 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.