0
名爲'ft'的按鈕應該採用當前值的布爾狀態,如果它爲True'on'使其False'off'並刪除一條紅線,或者如果False'off'使其成爲'True' '並重新創建紅線。出於某種原因,這僅適用前兩次我按下按鈕,然後它停止工作,我想不通爲什麼爲什麼我的變量不會相應地翻轉?
import tkinter
import tkinter.messagebox
from tkinter import *
state="on"
def nothing():
print ("meh.")
def controller(canvas,redline,test):
def something(canvas, redline, state):
if state=="off":
state="on"
redline=canvas.create_line(0,100,200,50, fill="red")
print ("state=off", state)
return state
else:
state="off"
canvas.delete(redline)
print ("state=on",state)
return state
state=something(canvas, redline, test)
global state
root=Tk()
canvas = Canvas(root, width=200, height=100)
blackline=canvas.create_line(0,0,200,50)
redline=canvas.create_line(0,100,200,50, fill="red")
greenline=canvas.create_line(0,50,200,50, fill="green")
toolbar=Frame(root, bg="red")
ft=Button(toolbar, text="TEST", command=lambda:controller(canvas,redline,state))
ft.pack(side=LEFT, padx=2, pady=2)
toolbar.pack(side=TOP, fill=X)
canvas.pack()
root.mainloop()
你有兩個變量'redline',一個(地方)裏面'controller',和第二(全球)這個函數之外。再次創建此行時,您不會爲外部/全局值分配新值。 – furas