我需要以下代碼的幫助,我嘗試使用 tkinter 創建一個軟體,我在將子函式內部函式的值傳遞給主模塊時遇到問題。如何在主模塊中獲取回傳結果并插入到 mylist 中。
這是代碼: 主模塊:test.py
from button_screener import screener
創建按鈕以打開螢屏。命令 = 篩選器
mylist = [ ]
mylist.insert(END, result)`
子模塊:button_screener
def screener():
code.... (create tkinter layout code)
OK_button created to execute function execute() - command = execute
def execute():
code... after several calculation..get result below
result = list [a,b,c]
return result
需要幫助,如果需要進一步說明,請告訴我。
謝謝
uj5u.com熱心網友回復:
當您呼叫一個新函式時,您可以將其視為創建一個堆疊(操作)。最新呼叫的函式將位于堆疊的頂部,一旦執行完畢,它將回傳到呼叫函式(如果您在 return 陳述句中指定,還回傳任何值)。
這意味著:當您在 execute() 函式中回傳結果時,它將將該結果提供給它的呼叫函式:screener()
由于您正在從主模塊呼叫 screener(),因此您應該在 screener() 中捕獲 execute() 的輸出,然后將其回傳到 screener() 的呼叫函式 - 這是 main。
def screener():
code.... (create tkinter layout code)
#OK_button created to execute function execute() - command = execute
def execute():
code... after several calculation..get result below
result = list [a,b,c]
return result
result_from_execute = execute() #capturing response from execute()
return result_from_execute #return the result to the main module
uj5u.com熱心網友回復:
由于這些函式是通過單擊按鈕執行的,因此從這些函式回傳的任何內容都將被丟棄。
由于您要回傳的結果是 a list,因此您可以將所需的list變數screener()作為引數傳遞給,該引數將在函式內部更新。
下面是一個簡單的例子:
import tkinter as tk
def screener(result):
def execute():
# do some calculation
a, b, c = 1, 2, 3
# then update result
result[:] = [a, b, c]
win.destroy()
win = tk.Toplevel()
tk.Button(win, text='OK', command=execute).pack(padx=50, pady=50)
win.grab_set()
mylist = []
root = tk.Tk()
tk.Button(root, text='Sceener', command=lambda:screener(mylist)).pack()
tk.Button(root, text='Show', command=lambda:print(mylist)).pack()
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407825.html
標籤:
上一篇:如何只允許頂部框架垂直拉伸
