猿问

导入函数时的错误信息 - 模块

我正在构建一个计算器,我正在按下按钮并在屏幕上显示值。为此,我创建了两个不同的 .py 文件(我想使用模块)。按照您的要求,我将使用最简单的代码更新帖子以重现该问题。这是计算器布局:


from tkinter import *

from screenvalue import value 


root=Tk()

frame=Frame(root) #frame for the buttons and other options

frame.config(background="#40798C")

frame.pack()

#------------------------ SCREEN ----------------------


screen=Text(frame, width=150, height=5)

screen.grid(row=1, column=1, padx=5, pady=5, columnspan=15)

screen.config(background="#E2E2E2", fg="black")

#--------button---------------------------------


button4=Button(frame, text="4", width=10, padx=0, pady=0, command=value)

button4.grid(row=4,column=11)

root.mainloop()

这是我正在使用的模块


from tkinter import *

character=StringVar()


def value():

    return character.set("4")

我将模块的名称从Typing.py 更改为screenvalue.py。你知道发生了什么吗?它们都在同一个文件夹中



斯蒂芬大帝
浏览 134回答 2
2回答

白衣染霜花

Tkinter 是一个多层次的东西。尽管您在 Python 中使用它,但它实际上使用另一种语言 Tcl 来管理 GUI。你得到那个错误信息AttributeError: 'NoneType' object has no attribute '_root'因为您试图在启动 Tcl 解释器之前创建一个 Tkinter 对象,这在您执行root=Tk().所以你需要重新组织你的代码,以便character = StringVar()在你做之前不会被执行root=Tk()。character = StringVar()导入时会执行该操作screenvalue。您可以将 import 语句移动到 之后root=Tk(),但最好进行更改,screenvalue以便在导入时它不会运行代码。FWIW,character.set("4")退货None,所以没有在具有函数返回的是多点。此外,回调函数返回有用的值也没有意义,因为您无法访问回调返回的值。

慕工程0101907

您在第二个文件中创建和导入character = StringVar()的type函数范围之外进行了定义。在命令中,from typing import type您仅导入type具有其作用域的函数,character而未在其中定义,这会导致您遇到错误。如果您character = StringVar()进入函数的范围,它将解决您的问题。def type():    character = StringVar()    return character.set("4")PS强烈建议不要使用影响python内置名称的变量和函数名称,例如'type'。
随时随地看视频慕课网APP

相关分类

Python
我要回答