> 백엔드 개발 > 파이썬 튜토리얼 > Tkinter의 위젯 그룹에 스크롤바를 어떻게 추가할 수 있나요?

Tkinter의 위젯 그룹에 스크롤바를 어떻게 추가할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-12-17 06:26:25
원래의
208명이 탐색했습니다.

How can I add a scrollbar to a group of widgets in Tkinter?

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

Tkinter는 창을 수직 또는 수평으로 스크롤하기 위한 스크롤바 위젯을 제공합니다. 그러나 스크롤바 인터페이스는 목록, 텍스트 상자, 캔버스 및 항목과 같은 특정 위젯에만 연결할 수 있습니다. window_create 메소드를 사용하여 간단한 수직 또는 수평 위젯 그룹을 텍스트 위젯 내에 배치할 수 있습니다. 그러나 이 방법은 복잡한 레이아웃에 대한 유연성이 부족합니다.

범용 레이아웃에 대한 보다 일반적인 솔루션은 관련 스크롤 막대가 있는 캔버스 위젯을 활용하는 것입니다. 그런 다음 위젯은 캔버스 내에 배치되는 프레임에 포함됩니다. 프레임의 너비와 높이는 캔버스의 스크롤 영역과 일치하도록 설정되어야 합니다.

프레임에 위젯을 포함하면 팩, 배치 또는 그리드 방법을 사용하여 배치할 수 있습니다. 이 접근 방식을 사용하면 프레임 내에서 생성된 모든 항목을 스크롤 막대를 사용하여 스크롤할 수 있습니다.

또는 캔버스에 직접 텍스트 요소를 그리는 것도 가능합니다. 줄 높이와 좌표는 글꼴 및 레이아웃 요구 사항에 따라 계산할 수 있습니다. 열 정보가 포함된 항목에 태그를 지정하면 열 전체의 x 좌표와 너비를 쉽게 조정할 수 있습니다.

객체 지향 솔루션

다음은 객체를 사용하는 프레임 내장형 캔버스 솔루션의 예입니다. 지향적 접근 방식:

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의 스크롤바 인터페이스에는 제한이 있지만 위젯 그룹에 스크롤바를 추가하는 방법에는 여러 가지가 있습니다. 이러한 접근 방식을 이해하면 Tkinter 창의 표시 및 스크롤을 효과적으로 관리할 수 있습니다.

위 내용은 Tkinter의 위젯 그룹에 스크롤바를 어떻게 추가할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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