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

Tkinter 레이블 그리드에 스크롤바를 추가하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-17 15:26:10
원래의
743명이 탐색했습니다.

How to Add a Scrollbar to a Grid of Tkinter Labels?

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

개요

Tkinter는 List와 같은 위젯에 대한 스크롤바를 제공합니다. , 텍스트 상자, 캔버스 및 항목. 그러나 스크롤 막대가 있는 라벨 위젯의 그리드를 표시하는 것은 이러한 위젯이 기본적으로 스크롤 막대를 지원하지 않기 때문에 어려울 수 있습니다.

솔루션

1. window_create를 사용한 텍스트 위젯:

  • window_create 메소드를 사용하여 텍스트 위젯을 생성하고 라벨 위젯을 추가합니다.
  • 이 메소드는 간단하지만 레이아웃 복잡성을 제한합니다.

2. 프레임이 포함된 캔버스:

  • 스크롤 막대가 연결된 캔버스 위젯을 만듭니다.
  • 캔버스 내에 프레임을 포함하고 라벨 위젯을 프레임 안에 배치합니다.
  • 프레임의 너비와 높이를 결정하고 이에 맞게 캔버스의 스크롤 영역 옵션을 설정합니다. 크기.

3. 캔버스에 직접 그리기:

  • tk.Frame에서 상속되는 사용자 정의 클래스를 생성하여 스크롤바와 캔버스를 관리하세요.
  • 레이블 위젯을 포함된 프레임 내에 배치하세요.
  • 프레임 구성에 따라 스크롤 영역을 조정하는 이벤트 바인딩 변경 사항.

객체 지향 솔루션:

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        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)

        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")

        self.frame.bind("<Configure>", self.onFrameConfigure)

        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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿