Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 두 개의 목록 상자(Listbox)에서 동시에 선택을 유지하는 방법

특정 시스템에서 한 디렉터리의 여러 파일을 선택한 뒤 클립보드로 복사하고, 이를 다른 디렉터리에 붙여넣어야 하는 상황을 생각해 볼 수 있습니다. 이처럼 여러 개의 목록 상자(Listbox)에서 선택 상태를 동시에 유지하려면 exportselection 속성을 활용하면 됩니다.

기본적으로 Tkinter의 Listbox 위젯은 다른 위젯에서 새 항목을 선택하는 순간 기존의 선택이 자동으로 해제됩니다. exportselection 속성은 이러한 동작을 제어하는 옵션으로, 이 값을 False로 설정하면 다른 ListBox에서 항목을 선택하더라도 기존 선택 항목이 사라지지 않습니다. 따라서 두 개 이상의 Listbox에서 각각 선택한 항목을 동시에 유지할 수 있습니다.

예제 코드

#Tkinter 라이브러리 임포트
from tkinter import *

#Tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()

#윈도우 크기 설정
win.geometry("750x350")

#Listbox 생성 (exportselection=False로 선택 상태 유지)
listboxA = Listbox(win, exportselection=False)
listboxA.pack(padx=10, pady=10, fill=BOTH, expand=True)

listboxB = Listbox(win, exportselection=False)
listboxB.pack(padx=10, pady=10, fill=BOTH, expand=True)

#Listbox A에 항목 추가
listboxA.insert(1, "1.Python")
listboxA.insert(2, "2.Java")
listboxA.insert(3, "3.C++")
listboxA.insert(4, "4.Rust")
listboxA.insert(5, "5.GoLang")

#Listbox B에 항목 추가
listboxB.insert(1, "a.C#")
listboxB.insert(2, "b.JavaScript")
listboxB.insert(3, "c.R")
listboxB.insert(4, "d.Php")
listboxB.insert(5, "e.CoffeeScript")
listboxB.insert(6, "f.Curl")

win.mainloop()

실행 결과

위 코드를 실행하면 두 개의 목록 상자가 나란히 배치된 윈도우가 표시됩니다. exportselection=False가 적용되었기 때문에 한쪽 Listbox에서 항목을 선택한 후 다른 쪽 Listbox에서 항목을 선택해도 이전 선택이 해제되지 않으며, 두 목록 상자에서 선택한 항목들이 동시에 유지됩니다.

참고: 한 목록 상자 안에서 여러 항목 선택하기

단일 Listbox 내부에서 여러 항목을 선택하고 싶다면 selectmode 옵션을 함께 사용할 수 있습니다. selectmode="multiple"은 Ctrl 키 없이 클릭만으로 여러 항목을 선택할 수 있게 해주고, selectmode="extended"는 Ctrl 또는 Shift 키를 이용한 범위 선택을 지원합니다. 이 옵션들을 exportselection=False와 조합하면 더욱 유연한 다중 선택 UI를 구현할 수 있습니다.