0

最近、プロジェクトを構築するために Python tkinter GUI と sqlite 3 を使用しているときに、Python プログラミングに関する多くの疑問を発見しました。質問の 1 つは、関数内の複数の値を Python の別の関数から呼び出す最良の方法は何でしょうか? その間、私は関数内の値の再調整と呼び出しについていくつかの調査を行いました.Python関数では複数の値を返すことができることを知っていますが、呼び出しに関しては、私が返す値を具体的に呼び出す必要があります. return (x,y,z)、どうやってそれを呼ぶことができるのか本当にわかりません。

ここに私のプロジェクトにあるいくつかのコードがあります。私のコードと上記の質問についての提案をお気軽にください。

最初の関数

def taskUpdateB():
    conn = sqlite3.connect("zzzsqlite.db")
    booking = conn.cursor()

    index = sOLB.curselection()
    selTask = sOLB.get(index)
    bookinID = selTask[-2]

    getBookID = booking.execute('''SELECT bookingID FROM booking 
                        WHERE bookingID=?''', (bookinID,))    

    taUp = Toplevel()
    taUp.title("Task Update")
    taskLabel = Label(taUp, text ="Task Update", font=('Times', 20))
    taskLabel.grid(row=0)

    showLabel = Label(taUp, text ="Please Select and Enter Infomation Below", font=('Times', 18))
    showLabel.grid(row=1)

    var = IntVar()
    var = 0
    fullRadio = Radiobutton(taUp, text="Fully", variable=var, value=1, command = taskUpdCom)
    fullRadio.grid(row=2, sticky=W)

    partRadio = Radiobutton(taUp, text="Partly", variable=var, value=2, command = taskUpdCom)
    partRadio.grid(row=3, sticky=W)

    notRadio = Radiobutton(taUp, text="Unable", variable=var, value=3, command = taskUpdCom)
    notRadio.grid(row=4, sticky=W)

    noteLabel = Label(taUp, text ="Note:", font=('Times', 16))
    noteLabel.grid(row=5, sticky=W)
    noteBox = Text(taUp, width=30, height =20, font=('Arial', 12,), highlightbackground='black')
    noteBox.grid(row=6)

    comButton = Button(taUp, text ="Task Complete and Send Invoice", command = taskUpdCom)
    comButton.grid(row =7)

    booking.close()
    return (var, noteBox, showLabel, bookinID)

第二の機能

 def taskUpdCom():
        a = taskUpdateB
        #get the data from the update list
        var = taskUpdateB.var()
        noteBox = taskUpdateB.noteBox()
        showLabel = taskUpdateB.showLabel()
        bookinID = taskUpdateB.bookinID()

    selProg = str(var.get())
    if selProg == 0:
        showLabel["text"] = ("***Please Select Task Progress Below***")
    elif noteBox.get() == "":
        showLabel["text"] = ("***Please Enter Task Note Below***")
    else:
        conn = sqlite3.connect("zzzsqlite.db")
        update = conn.cursor()
        wriUpda = zzzsqliteTable.addUpdate(bookinID, selProg, noteBox)
        conn.commit()
        updata.close()
        taskUpdateB.noteBox.delete(0, END)
        tkinter.messagebox.showinfo("Notification","Your task has been updated and removed from the list")
        try:
            deIndex = taskUpdateB.index()#The item selected from task update delete it from the list.... will still in the database.
            sOLB.delete(deIndex)
        except IndexError:
            pass

私のコードはまだ完全ではなく、ちょっと面倒なことを許してください...

ご協力いただきありがとうございます :)

4

1 に答える 1

5

それは関数がどのように機能するかではありません。おそらく、関数を呼び出してから、呼び出しスコープで結果をアンパックする必要があります。

var, noteBox, showLabel, bookinID = taskUpdateB()

関数が Python のオブジェクトであることは事実ですが、それらはステートフル プロセッサなどではなく、結果を直接返し、その後消えてしまいます (何か特別なことをしている場合を除きますが、実際にはそうではありません)。

于 2013-04-15T20:37:53.433 に答える