为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

斯蒂芬大帝 2021-06-09 14:49:05
我正在构建一个计算器,我正在按下按钮并在屏幕上显示值。为此,我创建了两个不同的 .py 文件(我想使用模块)。按照您的要求,我将使用最简单的代码更新帖子以重现该问题。这是计算器布局:from tkinter import *from screenvalue import value root=Tk()frame=Frame(root) #frame for the buttons and other optionsframe.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。你知道发生了什么吗?它们都在同一个文件夹中
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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,所以没有在具有函数返回的是多点。此外,回调函数返回有用的值也没有意义,因为您无法访问回调返回的值。


查看完整回答
反对 回复 2021-06-22
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

您在第二个文件中创建和导入character = StringVar()的type函数范围之外进行了定义。在命令中,from typing import type您仅导入type具有其作用域的函数,character而未在其中定义,这会导致您遇到错误。


如果您character = StringVar()进入函数的范围,它将解决您的问题。


def type():

    character = StringVar()

    return character.set("4")


PS强烈建议不要使用影响python内置名称的变量和函数名称,例如'type'。


查看完整回答
反对 回复 2021-06-22
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号