繁体   English   中英

TypeError: 'Tk' object is not callable 为什么我会收到此错误消息

[英]TypeError: 'Tk' object is not callable Why am i Getting this error message

from tkinter import *
import tkinter as tk
window = tk.Tk()
# Size of Canvas

window_height = 400
window_width = 600
window_colour = "red"
thickness = 0


# Creating the Canvas

window = window(bg=window_colour, height = window_height, \
            width = window_width, highlightthickness = thickness)

# Variables of the Pen

p1_x = window_width/2
p1_y = window_height

p1_colour = "green"
line_width = 5
line_length = 5

# Player Controls, Up, Down, Left, Right and Clear the screen

def p1_move_N(event):
    global p1_y
    window.create_line(p1_x, p1_y, p1_x, (p1_y-line_length), 
    width=line_width,fill=p1_colour)
    p1_y = p1_y - line_length
p1_move_N()

def p1_move_S(event):
    global p1_y
    window.create_line(p1_x, p1_y, p1_x, (p1_y+line_length),width=line_width,fill=p1_colour)
    p1_y = p1_y + line_length
p1_move_S()

def p1_move_W(event):
    global p1_x
    window.create_line(p1_x, p1_y, (p1_x-line_length),p1_y, width=line_width,fill=p1_colour)
    p1_x = p1_x - line_length
p1_move_W()

def p1_move_E(event):
    global p1_x
    window.create_line(p1_x,p1_y, (p1_x+line_length), p1_y, width=line_width,fill=p1_colour)
    p1_x = p1_x + line_length
p1_move_E()
def erase_all(event):
    canvas.delete(ALL)
erase_all()    

# Keyboard Controls

window.bind("<Up>", p1_move_N)
window.bind("<Down>", p1_move_S)
window.bind("<Right>", p1_move_E)
window.bind("<Left>", p1_move_W)

请有人帮我解决这个问题,这是为了我的学校工作,而且我使用的是 Macbook Pro 我是 python 的新手,非常感谢一些帮助。 当我运行它时,它说 TypeError: 'Tk' object is not callable 但是当我访问其他网站和这个网站时,我得到了不同的方法,它们似乎都不起作用,所以我认为发布我的代码会有很大帮助。

You used same variable window for the root window ( window = tk.Tk() ) and the canvas ( window = window(...) , but it should be canvas = tk.Canvas(...) ).

以下是修复名称冲突的修改代码:

import tkinter as tk

window = tk.Tk()

# Size of Canvas
window_height = 400
window_width = 600
window_colour = "red"
thickness = 0

# Creating the Canvas
canvas = tk.Canvas(bg=window_colour, height = window_height,
                   width = window_width, highlightthickness = thickness)
canvas.pack(fill="both", expand=1)

# Variables of the Pen

p1_x = window_width/2
p1_y = window_height

p1_colour = "green"
line_width = 5
line_length = 5

# Player Controls, Up, Down, Left, Right and Clear the screen

def p1_move_N(event=None):
    global p1_y
    canvas.create_line(p1_x, p1_y, p1_x, (p1_y-line_length), 
    width=line_width,fill=p1_colour)
    p1_y = p1_y - line_length
#p1_move_N()

def p1_move_S(event=None):
    global p1_y
    canvas.create_line(p1_x, p1_y, p1_x, (p1_y+line_length),width=line_width,fill=p1_colour)
    p1_y = p1_y + line_length
#p1_move_S()

def p1_move_W(event=None):
    global p1_x
    canvas.create_line(p1_x, p1_y, (p1_x-line_length),p1_y, width=line_width,fill=p1_colour)
    p1_x = p1_x - line_length
#p1_move_W()

def p1_move_E(event=None):
    global p1_x
    print('move E')
    canvas.create_line(p1_x,p1_y, (p1_x+line_length), p1_y, width=line_width,fill=p1_colour)
    p1_x = p1_x + line_length
#p1_move_E()

def erase_all(event=None):
    canvas.delete(ALL)
#erase_all()    

# Keyboard Controls

canvas.bind("<Up>", p1_move_N)
canvas.bind("<Down>", p1_move_S)
canvas.bind("<Right>", p1_move_E)
canvas.bind("<Left>", p1_move_W)
# need to make canvas focused, otherwise keyboard events will not be received
canvas.focus_set()

window.mainloop()

注意:像下面这样导入tkinter模块是不好的做法:

from tkinter import *
import tkinter as tk

建议使用import tkinter as tk

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM