2014-12-03 2 views
0

제가 프로그램 명 (크롬, 썬더 어도비 리더 등)목록 상자 (Tkinter의) 내의 엔트리의 수

I는이 목록을 검색하는 검색 기능을 사용할 통해 검색 항목을 사용 목록 상자에 추가 된 프로그램 이름이 목록 상자에 추가되면 검색 기능 인 entry_1을 사용하여이 모든 이름을 검색 한 다음 검색 한 항목을 강조 표시합니다.

이것이 가능합니까? 나는이 오래 전에 질문을 받았다 알고

from tkinter import * 
 

 
    
 
#definitions 
 
root = Tk() 
 
var_1 = StringVar(root) 
 
label_1 = Label(root, text="Search:") 
 
label_2 = Label(root, text="Subject specific programs below") 
 
label_3 = Label(root, text="Subject:") 
 
entry_1 = Entry(root) #this should search through the strings listed under listbox_2 configs 
 
button_1 = Button(root, text="Install") 
 
scrollbar_1 = Scrollbar(root) 
 
listbox_2 = Listbox(root, yscrollcommand=scrollbar_1.set) 
 
optionmenu_1 = OptionMenu(root, var_1, "Computing", "Engineering", "Physics") 
 
string_1 = StringVar(root, name="Google Chrome") 
 
string_2 = StringVar(root, name="Thunderbird") 
 
string_3 = StringVar(root, name="Adobe Reader X") 
 
string_4 = StringVar(root, name="WinRAR") 
 
string_5 = StringVar(root, name="OpenOffice") 
 
string_6 = StringVar(root, name="Program 1") 
 
string_7 = StringVar(root, name="Program 2") 
 
string_8 = StringVar(root, name="Program 3") 
 
string_9 = StringVar(root, name="Program 4") 
 
string_10 = StringVar(root, name="Program 5") 
 
string_11 = StringVar(root, name="Program 6") 
 

 
#configuration 
 
root.title("Network Installation") 
 
listbox_2.insert(1, string_1) 
 
listbox_2.insert(2, string_2) 
 
listbox_2.insert(3, string_3) 
 
listbox_2.insert(4, string_4) 
 
listbox_2.insert(5, string_5) 
 
listbox_2.insert(6, string_6) 
 
listbox_2.insert(7, string_7) 
 
listbox_2.insert(8, string_8) 
 
listbox_2.insert(9, string_9) 
 
listbox_2.insert(10, string_10) 
 
listbox_2.insert(11, string_11) 
 
optionmenu_1.config(width=15) 
 
scrollbar_1.config(command=listbox_2.yview) 
 

 
#grid additions 
 
label_1.grid(row=0, column=5) 
 
label_2.grid(columnspan=6, row=1, column=0, sticky=E) 
 
entry_1.grid(row=0, column=6) 
 
button_1.grid(columnspan=2, row=7, column=5) 
 
listbox_2.grid(rowspan=6, columnspan=6, row=2, column=0) 
 
scrollbar_1.grid(rowspan=6, row=2, column=4, sticky=N+S) 
 
optionmenu_1.grid(columnspan=3, row=0, column=1) 
 
label_3.grid(row=0, column=0) 
 

 

 
root.mainloop()

+0

예, 가능합니다. 지금까지 뭐 해봤 어? 문제 또는 해결책의 어떤 부분을 이해하지 못합니까? –

+0

나는 당신에게 회신하는 방법을 모르겠지만, 지금까지 나는이 목적을 위해 어떻게 Entry를 사용할 지 모르겠으므로 아무 것도 시도하지 않았습니다. 나는 또한 내가 그것을 올바르게 설정했는지 알지 못한다. 그러나 나의 주된 문제는 어디서부터 시작해야 할지를 모른다. @ 브라이언 오클리 – philal

답변

0

그러나 여기의 Tkinter에서 검색 입력 상자를 사용하여 목록 상자 항목을 선택하는 방법은 다음과 같습니다

여기 내 코드입니다.

설명 :

  1. all_listbox_items은 가장 중요한 부분입니다. 프로그램이 처음 목록 상자를 채우는 경우 이러한 초기 값을 캡처하고 검색 항목 상자를 사용하여 이러한 초기 항목을 쿼리하는 것이 중요합니다.
  2. textvariableentry_1에 추가하고 이름을 search_var으로 지정하십시오.
  3. search_var에 추적을 넣으므로 entry_1의 값이 변경되면 highlight_searched이라는 함수를 트리거 할 수 있습니다.
  4. highlight_searched은 기본적으로 enumerates의 모든 목록 상자 항목이며 entry_1에 검색된 텍스트가 목록 상자의 항목에 있는지 확인합니다. 이것이 사실이라면, selection_set(i) (여기서 i는 색인 용으로 짧은 것임)을 사용하여 각 항목을 선택하십시오.

열거 형을 사용하는 것이 특히 만족스럽지 않습니다. 그것은 쉽습니다. for 루프에서 항목의 인덱스를 반환하는 더 좋은 방법은 분명합니다. 열거 제안에 대한 더 나은 솔루션을 듣고 싶습니다.

코드 :

from tkinter import * 

#definitions 
root = Tk() 
var_1 = StringVar(root) 
label_1 = Label(root, text="Search:") 
label_2 = Label(root, text="Subject specific programs below") 
label_3 = Label(root, text="Subject:") 

def highlight_searched(*args): 
    search = search_var.get() 
    for i,item in enumerate(all_listbox_items): 
    if search.lower() in item.lower(): 
     listbox_2.selection_set(i) 
    else: 
     listbox_2.selection_clear(i) 
    if search == '': 
    listbox_2.selection_clear(0, END) 

search_var = StringVar() 
search_var.trace('w', highlight_searched) 
entry_1 = Entry(root, textvariable=search_var) #this should search through the strings listed under listbox_2 configs 

button_1 = Button(root, text="Install") 
scrollbar_1 = Scrollbar(root) 
listbox_2 = Listbox(root, yscrollcommand=scrollbar_1.set) 
optionmenu_1 = OptionMenu(root, var_1, "Computing", "Engineering", "Physics") 
string_1 = StringVar(root, name="Google Chrome") 
string_2 = StringVar(root, name="Thunderbird") 
string_3 = StringVar(root, name="Adobe Reader X") 
string_4 = StringVar(root, name="WinRAR") 
string_5 = StringVar(root, name="OpenOffice") 
string_6 = StringVar(root, name="Program 1") 
string_7 = StringVar(root, name="Program 2") 
string_8 = StringVar(root, name="Program 3") 
string_9 = StringVar(root, name="Program 4") 
string_10 = StringVar(root, name="Program 5") 
string_11 = StringVar(root, name="Program 6") 

#configuration 
root.title("Network Installation") 
listbox_2.insert(1, string_1) 
listbox_2.insert(2, string_2) 
listbox_2.insert(3, string_3) 
listbox_2.insert(4, string_4) 
listbox_2.insert(5, string_5) 
listbox_2.insert(6, string_6) 
listbox_2.insert(7, string_7) 
listbox_2.insert(8, string_8) 
listbox_2.insert(9, string_9) 
listbox_2.insert(10, string_10) 
listbox_2.insert(11, string_11) 
optionmenu_1.config(width=15) 
scrollbar_1.config(command=listbox_2.yview) 

#grid additions 
label_1.grid(row=0, column=5) 
label_2.grid(columnspan=6, row=1, column=0, sticky=E) 
entry_1.grid(row=0, column=6) 
button_1.grid(columnspan=2, row=7, column=5) 
listbox_2.grid(rowspan=6, columnspan=6, row=2, column=0) 
scrollbar_1.grid(rowspan=6, row=2, column=4, sticky=N+S) 
optionmenu_1.grid(columnspan=3, row=0, column=1) 
label_3.grid(row=0, column=0) 

all_listbox_items = listbox_2.get(0, END) 

root.mainloop() 

그리고 (요구하고이 질문처럼 강조 반대) 목록 상자를 필터링하는 검색 상자를 찾고 수 있습니다이 질문에 보여주는 사람 만 관련 항목을 표시 검색과 관련하여 다음을 사용할 수 있습니다.

import tkinter as tk 

root = tk.Tk() 
def update_listbox(*args): 
    search_term = search_var.get() 
    listbox.delete(0, tk.END) 
    for item in all_items: 
    if search_term.lower() in item.lower(): 
     listbox.insert(tk.END, item) 

search_var = tk.StringVar() 
search_var.trace('w', update_listbox) 
searchbox = tk.Entry(root, textvariable=search_var) 
searchbox.pack(fill=tk.X, expand=False) 

listbox = tk.Listbox(root) 
for i in ['Adam', 'Lucy', 'Barry', 'Bob']: 
    listbox.insert(tk.END, i) 
listbox.pack() 
all_items = listbox.get(0, tk.END) 
root.mainloop() 
관련 문제