tkinter - AttributeError:“NoneType”对象没有属性“几何”
问题描述
我该如何解决这个错误?
try:
from Tkinter import *
except ImportError:
from tkinter import *
from tkinter import ttk
from tkinter.ttk import *
from idlelib.tree import ScrolledCanvas, FileTreeItem, TreeNode
import os
import tkinter.messagebox
class FileManager(Tk):
def createWidgets(self):
self.menu = Menu(self)
self.submenu = Menu(self.menu)
self.menu.add_cascade(label='File', menu = self.submenu)
self.submenu.add_command(label='New Project')
self.submenu.add_command(label='Open...')
self.submenu.add_separator()
self.submenu.add_command(label='Save')
self.submenu.add_command(label='Save As...')
self.submenu.add_separator()
self.submenu.add_command(label='Exit')
self.editmenu = Menu(self.menu)
self.menu.add_cascade(label='Edit', menu = self.editmenu)
self.editmenu.add_command(label='Undo')
self.editmenu.add_command(label='Redo')
self.editmenu.add_separator()
self.editmenu.add_command(label='Cut')
self.editmenu.add_command(label='Copy')
self.editmenu.add_command(label='Copy Path')
self.editmenu.add_command(label='Paste')
self.editmenu.add_command(label='Select All')
self.editmenu.add_separator()
self.editmenu.add_command(label='Replace')
self.editmenu.add_command(label='Rename')
self.editmenu.add_command(label='Move to...')
self.optionsmenu = Menu(self.menu)
self.menu.add_cascade(label='Options', menu = self.optionsmenu)
self.optionsmenu.add_command(label='Very Large Icons')
self.optionsmenu.add_command(label='Large Icons')
self.optionsmenu.add_command(label='Medium Icons')
self.optionsmenu.add_command(label='Small Icons')
self.optionsmenu.add_command(label='List')
self.optionsmenu.add_command(label='Tiles')
self.optionsmenu.add_command(label='Details')
self.optionsmenu.add_command(label='Content')
self.optionsmenu.add_command(label='List')
self.optionsmenu.add_separator()
self.optionsmenu.add_command(label='Show Libraries')
self.optionsmenu.add_command(label='Show All Folders')
self.optionsmenu.add_command(label='')
self.optionsmenu.add_command(label='')
self.optionsmenu.add_command(label='')
def __init__(self,master=None):
Tk.__init__(self)
self.createWidgets()
self.config(menu=self.menu)
self.master.geometry("1000x500+200+100")
self.master.title("File Explorer")
self.pack(side="top")
self.entry=tkinter.ttk.Entry(master)
self.entry.pack(side="top",fill=X)
self.entry.focus()
self.sc = ScrolledCanvas(master, highlightthickness=0, takefocus=1)
self.sc.frame.pack(expand=0, fill="both", side="left")
item = FileTreeItem("C:")
node = TreeNode(self.sc.canvas, False, item)
node.expand()
self.fr=tkinter.ttk.Frame(master)
self.fr.pack(side="top",expand=True,fill="both")
self.contents=tkinter.ttk.Label(self.fr,text="Contents", style="BW.TLabel")
self.contents.pack(side="top",expand=False,fill=X)
self.entry.bind("<Return>",lambda e:self.buttonClick())
self.button=ttk.Button(self.entry,text="Find result",width=20)
self.button.pack(side="right")
self.button.config(command=self.buttonClick)
self.fr2=Text(self.fr)
self.scrollbar=tkinter.ttk.Scrollbar(self.fr2,command=self.fr2.yview)
self.scrollbar.pack(side="right",fill=Y)
self.fr2.configure(yscrollcommand=self.scrollbar.set)
self.fr2.pack(side="top",expand=True,fill="both")
self.fr3=tkinter.ttk.Frame(master)
self.fr3.pack(side="right",expand=True,fill="both")
self.open=ttk.Button(self.fr3,text='Open',command=self.openButton)
self.open.pack(side="left",fill=X,expand=True)
self.delete=ttk.Button(self.fr3,text="Delete",command=self.eraseButton)
self.delete.pack(side="left",fill=X,expand=True)
def buttonClick(self):
orisma=self.entry.get()
os.system(orisma)
self.fr2.delete('1.0','end')
try:
g=os.listdir(orisma)
times=len(g)
self.fr2.insert('end',orisma)
self.fr2.insert('end',' -->')
self.fr2.insert('end','\n')
self.fr2.insert('end','\n')
for i in range(times):
s=g[i]
self.fr2.insert('end',s)
self.fr2.insert('end','\n')
except:
tkinter.messagebox.showerror("Error", "Δεν εντοπίστηκε η διαδρομή!")
def openButton(self):
ranges = self.fr2.tag_ranges(SEL)
if ranges:
var=str(self.fr2.get(SEL_FIRST, SEL_LAST))
try:
end=var.index('\n')
if end>0:
print(var[:end])
except:
print(var)
else:
tkinter.messagebox.showerror("TclError ", "Δεν επιλέχθηκε αρχείο!")
def onClick(self):
pass
def __str__(self):
pass
def focus_get(self):
pass
def eraseButton(self):
pass
if __name__=="__main__":
root = FileManager()
root.mainloop()
我不能有菜单栏。我曾经在课堂上使用 Frame 而不是 Tk,但菜单无法与 Frame 一起使用,所以我更改了它,但仍然没有任何效果。有什么方法可以定义 root=Tk() 并以某种方式将其传递给类?我是 Python 新手,对任何编程语言一无所知。另外,我的英语有点烂,所以请表现出一些理解:P 无论如何,如果有人可能有空闲时间查看我的一小部分代码并帮助我找到解决此错误的方法,我会非常高兴:D
解决方案
推荐阅读
- javascript - 如何将 onclick 返回到 kendoGrid 列?
- java - 如何在java中的双向链表中快速排序
- c# - 当字符串从另一个类更改时,我可以触发事件吗?
- discord - on_member_update 昵称更改未按预期进行
- opengl - 使用 GL_SAMPLE_ALPHA_TO_COVERAGE 并写入 Alpha 通道
- text-to-speech - PowerShell 中的 Mozilla TTS:“用户警告:具有 CUDA 功能 sm_86 的 NVIDIA GeForce RTX 3060 Ti 与当前的 PyTorch 安装不兼容
- javascript - 显示一个
- python - Keras:输入张量的等级必须为 3、4 或 5,但为 2
- logic - 转换系统和计算树逻辑 - 无法理解这一点
- javascript - (Jquery Validate) onkeyup: false 适用于一个字段,直到我第二次选择它