我猜你的代碼看起來是這樣的:
from Tkinter import Tk, Button
def run_command():
machines_off = []
# Some stuff .....
machineName = "foo"
machines_off.append(machineName)
# Some stuff ....
wol_machines(machines_off)
def wol_machines(machines_off):
print "wol_machines was called"
print "contents of machines_off: ", machines_off
# Some stuff ....
root = Tk()
a = Button(text="do the first thing", command=run_command)
b = Button(text="do the second thing", command=wol_machines)
a.pack()
b.pack()
root.mainloop()
如果你想要的功能來執行彼此獨立的,你不應該從run_command
中調用wol_machines
。您必須找到其他方法才能看到該列表。這樣做的一種方法是使用全局值。
from Tkinter import Tk, Button
machines_off = []
def run_command():
#reset machines_off to the empty list.
#delete these next two lines if you want to retain old values.
global machines_off
machines_off = []
# Some stuff .....
machineName = "foo"
machines_off.append(machineName)
# Some stuff ....
def wol_machines():
print "wol_machines was called"
print "contents of machines_off: ", machines_off
# Some stuff ....
root = Tk()
a = Button(text="do the first thing", command=run_command)
b = Button(text="do the second thing", command=wol_machines)
a.pack()
b.pack()
root.mainloop()
這是你的原代碼,可以給你你想要的行爲,最簡單的變化,但全球值一般認爲是不好的設計的徵兆。更多面向對象的方法可以將全局局部化爲類屬性。
from Tkinter import Tk, Button
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.machines_off = []
a = Button(self, text="do the first thing", command=self.run_command)
b = Button(self, text="do the second thing", command=self.wol_machines)
a.pack()
b.pack()
def run_command(self):
#reset machines_off to the empty list.
#delete this next line if you want to retain old values.
self.machines_off = []
# Some stuff .....
machineName = "foo"
self.machines_off.append(machineName)
# Some stuff ....
def wol_machines(self):
print "wol_machines was called"
print "contents of machines_off: ", self.machines_off
# Some stuff ....
root = App()
root.mainloop()
你是超級巨星!這正是我需要的。 我已經走了第一個選項,因爲它是最簡單易懂的。 雖然有一個問題,爲什麼我不需要第二個函數中的另一個'global machines_off'行? – user3514446