Python 我能';t将白板设置为顶级后,不要让它绘图-Tkinter

Python 我能';t将白板设置为顶级后,不要让它绘图-Tkinter,python,tkinter,Python,Tkinter,当设置为根时,白板功能正确,现在移动到顶层弹出窗口,线条只能从0,0向外发出,从左上角创建漂亮的图形线条。不是预期的目标..嗯 我怀疑这与我的“全球”声明有关,但我始终无法摆脱。下面是位于shell画布顶层的代码: # WHITEBOARD POPUP def whiteboardPanel(): whitePanel = Toplevel(root) whitePanel.transient(root) whitePanel.title("WHITEBOARD")

当设置为根时,白板功能正确,现在移动到顶层弹出窗口,线条只能从0,0向外发出,从左上角创建漂亮的图形线条。不是预期的目标..嗯

我怀疑这与我的“全球”声明有关,但我始终无法摆脱。下面是位于shell画布顶层的代码:

# WHITEBOARD POPUP
def whiteboardPanel():
    whitePanel = Toplevel(root)
    whitePanel.transient(root)
    whitePanel.title("WHITEBOARD")
    whitePanel.minsize(550,600)
    whitePanel.maxsize(550,600)
    #whitePanel.focus_set()
    #whitePanel.grab_set()
    whitePanel.geometry("550x600+1800+215")

    lastX, lastY = 0, 0

    colour = "black"

    erase = "white"
    thick = 5

    # =========  FUNCTION DEF ==========

    def set_colour_red(event):
       global colour
        colour = "red"
       thick = 5

    def set_colour_green(event):
       global colour
       colour = "green"
       thick = 5

   def set_colour_black(event):
       global colour
       colour = "black"
       thick = 5

   def set_colour_erase(event):
       global colour
       colour = "white"
       thick = 10

   def store_position(event):
       lastX = event.x
       lastY = event.y

   def on_click(event):
       store_position(event)

   def on_drag(event):
       lastX, lastY = 0, 0

       canvas.create_line(lastX, lastY, event.x, event.y, fill=colour, width=thick)
       store_position(event)

canvas = Canvas(whitePanel, width=550, height=600, bg="white")
canvas.pack()
# fill='both', expand=True, padx=6, pady=6)
canvas.bind("<Button-1>", on_click)
canvas.bind("<B1-Motion>", on_drag)
red_id = canvas.create_rectangle(10, 10, 30, 30, fill="red")
green_id = canvas.create_rectangle(10, 35, 30, 55, fill="green")
black_id = canvas.create_rectangle(10, 60, 30, 80, fill="black")
erase_id = canvas.create_rectangle(10, 85, 30, 105, fill="white")

canvas.tag_bind(red_id, "<Button-1>", set_colour_red)
canvas.tag_bind(green_id, "<Button-1>", set_colour_green)
canvas.tag_bind(black_id, "<Button-1>", set_colour_black)
canvas.tag_bind(erase_id, "<Button-1>", set_colour_erase)


....somewhere down below
....root.mainloop()
#白板弹出窗口
def白板面板():
白色面板=顶层(根)
whitePanel.transient(根目录)
白板标题(“白板”)
whitePanel.minsize(550600)
白色面板。最大尺寸(550600)
#whitePanel.focus_set()
#whitePanel.grab_set()
白色面板。几何形状(“550x600+1800+215”)
lastX,lastY=0,0
color=“黑色”
擦除=“白色”
厚度=5
#==========函数定义==========
def设置颜色红色(事件):
全球色彩
color=“红色”
厚度=5
def设置颜色绿色(事件):
全球色彩
color=“绿色”
厚度=5
def设置颜色黑色(事件):
全球色彩
color=“黑色”
厚度=5
def设置颜色擦除(事件):
全球色彩
color=“白色”
厚度=10
def存储位置(事件):
lastX=event.x
lastY=event.y
单击时的def(事件):
存储位置(事件)
拖动def(事件):
lastX,lastY=0,0
画布.创建线(lastX,lastY,event.x,event.y,填充=颜色,宽度=厚度)
存储位置(事件)
画布=画布(白色面板,宽度=550,高度=600,bg=“白色”)
canvas.pack()
#fill='both',expand=True,padx=6,pady=6)
canvas.bind(“,单击时)
canvas.bind(“,拖动时)
红色=画布。创建矩形(10,10,30,30,fill=“红色”)
绿色=画布。创建矩形(10,35,30,55,fill=“绿色”)
黑色=画布。创建矩形(10,60,30,80,fill=“黑色”)
擦除id=canvas。创建矩形(10,85,30,105,fill=“白色”)
canvas.tag\u bind(红色\u id,“,设置颜色\u红色)
canvas.tag\u bind(绿色\u id,“,设置颜色\u绿色)
canvas.tag\u bind(黑色\u id,“,设置颜色\u黑色)
canvas.tag\u bind(擦除\u id,“”,设置\u颜色\u擦除)
……在下面的某个地方
..root.mainloop()

请注意,其他顶级窗口工作正常,除绘图问题外,没有其他问题。

通过删除#lastX,lastY=0,0作为全局参数,我能够绘制,但是单击(事件)定义不起作用,因此我当前使用红色,需要找到另一种方法来更改颜色

请提供一个,并澄清您的问题。您不应该在另一个
def
中嵌套函数(
def
)。我怀疑如果你把set_colour_red等功能移出白板功能,它会工作的。如果您想将函数保存在一个集合中,请了解类。我同意类选项,但在这一点上,我太倾向于这种格式。我将带着改进我的编码惯例的意图返回。谢谢