2017-11-21 8 views
-1

두 개의 스레드가 있습니다. 하나는 숫자를 제공하고, 다른 하나는 생산 된 tkinter를 사용하는 숫자입니다.tkinter를 사용하여 목록 상자에서 선택한 항목의 세부 사항을 표시하는 방법

숫자 순서에 스크롤바를 사용합니다. 그러나, 내가 뭘 클릭하는지, 사각형 번호와 같은 몇 가지 세부 사항을보고 싶습니다. 내가 결과에 팔을 클릭하면

예를 들어, 나는 세부 사항 내 생각이 달성하는 방법 그래서

사진을 64을 얻을 수 있나요? 현재 코드는 여기에 있습니다 :

from concurrent.futures import ThreadPoolExecutor 
from tkinter import * 
from time import sleep 
global root 
global scrollbar 
global listb 

def my_func1(): 
    global root 
    global Scrollbar 
    root = Tk() 
    lbl1 = Label(root, text="Result:", fg='black', 
       font=("Helvetica", 16, "bold")) 
    lbl2 = Label(root, text="Detail:", fg='black', 
       font=("Helvetica", 16, "bold")) 
    lbl1.grid(row=0, column=0, sticky=W) 
    lbl2.grid(row=2, column=0, sticky=W) 

    frm = Frame(root) 
    frm.grid(row=1, columnspan=2, sticky=N + S + W + E) 

    try: 
     scrollbar = Scrollbar(frm, orient=VERTICAL) 
     global listb 
     listb = Listbox(frm, yscrollcommand=scrollbar.set, width=50) 
     scrollbar.config(command=listb.yview) 
     scrollbar.pack(side=RIGHT, fill=Y) 
     listb.pack(fill=BOTH, expand=YES) 
     detail = Listbox(root, height=10, font=("Helvetica", 12)) 
     detail.grid(row=6, columnspan=2, sticky=E + W + N) 
    except: 
     pass 
    root.mainloop() 

def my_func2(): 
    global listb 
    sleep(0.1) 
    for i in range(1000): 
     sleep(0.3) 
     vw = listb.yview() 
     listb.insert(END, i) 
     listb.yview_moveto(vw[-1]) 
     print(i) 
executors_list = [] 

with ThreadPoolExecutor(max_workers=5) as executor: 
    executors_list.append(executor.submit(my_func1)) 
    executors_list.append(executor.submit(my_func2)) 
+1

[?를 Tkinter의 목록 상자 선택이 변경되는 콜백을 가져 오기] (https://stackoverflow.com/questions/6554805/getting-a-callback-when-a-tkinter-listbox -selection-is-changed) – furas

+0

@furas 예 그걸 달성하고 싶습니다. 나는 'bind'를 사용할 때 왜 작동하지 않는가? – user6456568

+0

푸라 (furas)와 연결된 질문의 두 번째 답변을 시도해 보셨습니까? –

답변

0

모두에게 도움을. 답은 여기에 있습니다 :

import time, threading 
from time import sleep 
from tkinter import * 
from tkinter import messagebox 
global listb 

class App(object): 
    def __init__(self, root): 
     def onselect(evt): 
      w = evt.widget 
      index = int(w.curselection()[0]) 
      value = w.get(index) 
      detail.delete('1.0', END) 
      detail.insert(END,str(value*value)) 
     lbl1 = Label(root, text="Result:", fg='black', 
        font=("Helvetica", 16, "bold")) 
     lbl2 = Label(root, text="Detail:", fg='black', 
         font=("Helvetica", 16, "bold")) 
     lbl1.grid(row=0, column=0, sticky=W) 
     lbl2.grid(row=2, column=0, sticky=W) 

     frm = Frame(root) 
     frm.grid(row=1, columnspan=2, sticky=N + S + W + E) 


     scrollbar = Scrollbar(frm, orient=VERTICAL) 
     global listb 
     listb = Listbox(frm, yscrollcommand=scrollbar.set, width=50) 
     scrollbar.config(command=listb.yview) 
     scrollbar.pack(side=RIGHT, fill=Y) 
     listb.pack(fill=BOTH, expand=YES) 

     detail = Text(root, height=10, font=("Helvetica", 12)) 
     detail.grid(row=6, columnspan=2, sticky=E + W + N) 
     listb.bind('<<ListboxSelect>>', onselect) 


def InfiniteProcess(): 
    global listb 
    sleep(0.1) 
    for i in range(1000): 
     sleep(0.3) 
     vw = listb.yview() 
     listb.insert(END, i) 
     listb.yview_moveto(vw[-1]) 
     #print(i) 

finish = False 
Process = threading.Thread(target=InfiniteProcess) 
Process.start() 

mainWindow = Tk() 
app = App(mainWindow) 
mainWindow.mainloop() 
finish = True 
Process.join()