2013-12-20 3 views
1

다음 코드에 문제가 있습니다. 이제는 프로그래밍에 익숙하지 않은데, 대부분의 코드는 인터넷에서 복사됩니다. 그래서 그것을 조정하여 원하는대로 작동하게되었습니다. 그래서 쉽게 해결할 방법이 없다면 괜찮습니다. 어쩌면 프로그래밍이나 파이썬에 대한 약간의 주제를 지적 할 수 있습니다.다른 함수의 한 함수에서 정의 된 목록 사용. Python 2.7

어쨌든 설명하려고합니다. function query()를 정의했습니다. sqlite 데이터베이스를 일부 변경합니다. 입력은 목록입니다. 그 기능은 단지 그 자체로 사용하면 잘 작동합니다.

이제 인터페이스를 정의 할 수있는 곳이 무엇인지, 어떤 체크 상자가 선택되어 있는지에 따라 그 목록 안에 있어야 할 항목이 있는지 확인하려고합니다. 그런 다음 버튼을 누르면 특정 목록이있는 기능을 실행하려고합니다. 체크 박스는 단추도 잘 생성됩니다. 또한, 버튼을 체크하거나 체크를 해제하면 목록이 잘 업데이트되고 인터프리터에 새로 업데이트 된 목록이 표시됩니다.

1. 새로 업데이트 된 목록을 사용하지 않고 빈 목록()을 사용합니다. 2. 미리 정의 된 목록을 입력하면 비어 있지 않습니다. , 그것은 심지어 나를 클릭하지 않고도 버튼을 클릭하여 query()를 자동으로 실행합니다.

내가 잘 설명하지는 않았지만 내 문제가 무엇인지 이해하시기 바랍니다. 도움

`

def chkbox_checked(): 
    for ix, item in enumerate(cb): 
     opt[ix]=(cb_v[ix].get()) 
    print opt 

def query(opt): 
    import sqlite3 
    connection = sqlite3.connect("gather.sqlite") 
    cursor1 = connection.cursor() 

    cursor1.execute('Drop table IF EXISTS matches') 
    cursor1.execute('CREATE TABLE matches(date TEXT, team1 TEXT, team2 TEXT, league TEXT)') 
    cursor1.execute('DELETE FROM "main"."matches"') 

    for i in range(0, len(opt)): 
     a=opt[i] 
     cursor1.execute('INSERT INTO matches (date, team1, team2, league) SELECT * FROM gather WHERE team1=? or team2=? or league=?', (a,a,a,)) 

    cursor1.execute('Drop table IF EXISTS matchessorted') 
    cursor1.execute('CREATE TABLE matchessorted(date TEXT, team1 TEXT, team2 TEXT, league TEXT)') 
    cursor1.execute('DELETE FROM "main"."matchessorted"') 
    cursor1.execute('INSERT INTO matchessorted (date, team1, team2, league) SELECT * FROM matches ORDER BY date') 

    connection.commit() 





import Tkinter as tk 
from Tkinter import * 

opt = [] 

root = tk.Tk() 
mylist = [ 
'name1', 
'name2', 
'name3' 
] 
cb = [] 
cb_v = [] 
for ix, text in enumerate(mylist): 
    cb_v.append(tk.StringVar()) 
    off_value=0 
    cb.append(tk.Checkbutton(root, text=text, onvalue=text,offvalue=off_value, 
          variable=cb_v[ix], 
          command=chkbox_checked)) 
    cb[ix].grid(row=ix, column=0, sticky='w') 
    opt.append(off_value) 
    cb[-1].deselect() 


label = tk.Label(root, width=20) 
label.grid(row=ix+1, column=0, sticky='w') 


button1 = Button(root, text = "Calculate", command = query(opt)) 
button1.grid(column=1, row=0, sticky=W) 


root.mainloop() 

`

답변

0

에 대한

덕분에 코드를 구성하는 방법에 대한 포인트의 몇 가지 : 당신은 당신의 선택에 따라 목록을 채 웁니다 함수를 작성해야 . 그것은 '옵션'목록 호출을 반환 할 수 있으며 쿼리 내에서 코드를 실행하려면 옵션 목록을 구성하는 함수를 호출합니다. 쿼리 함수는 다음과 같은 문을 갖습니다 :

options = get_options() #assuming the function that populates the options is called get_options 

다음 쿼리 함수의 코드를 실행합니다.

+0

이 chkbox_checked 아닌가요은() 목록을 채우는? 이렇게해야합니까? 옵션 =이 다음 쿼리 (옵션) 을 chkbox_checked? – user2317500

+0

그것은 작동합니다! 큰! 고마워. – user2317500

0
button1 = Button(root, text = "Calculate", command = query(opt)) 

사용자가 Button을 만들기 전에 즉시 쿼리 (opt)를 호출하고 해당 호출 결과 (없음)를 명령 생성자의 Button 생성자에 전달합니다. 당신이 정말로 원하는 것은 호출 될 때 query (opt)를 실행하는 함수입니다. 이런 식으로 뭔가 :

def calculate_clicked(): 
    query(opt) 
button1 = Button(root, text = "Calculate", command = calculate_clicked) 

나이 :

button1 = Button(root, text = "Calculate", command = lambda : query(opt)) 
+0

감사합니다. 작동합니다! :) – user2317500

관련 문제