亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

導入函數時的錯誤信息 - 模塊

導入函數時的錯誤信息 - 模塊

斯蒂芬大帝 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 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號