- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 tkinter 比较陌生。我创建了这个应用程序,它运行得很好。然后我添加了 HelpPage 类,它给了我这个错误“KeyError:”我删除了 HelpPage 类,并且出现了与 main.PageTwo 相同的错误。我似乎无法再让它运行了。
这是代码(即使没有显示,函数也都正确缩进了):
## This program calculates the number of pixels which need to be removed from each edge of collected images based on camera paramters and measured distances
## horizontal_field_of_view = camera_distance*(sensor_width/focal_length) where sensor_width is the horizontal width. Sensor_width and focal_length are measured in mm and camera distance is measure in m
## resolution = horizontal_field_of_view/number_of_pixels where horizontal_field_of_view is measured in m. The results is the width of a single pixel measured in m.
import Tkinter as tk
import tkFileDialog
import os
class Application(tk.Tk):
PixSize=0
cnt=1
height=0
width=0
NumPixX=0
NumPixY=0
NumImages=0
file='none'
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self,*args,**kwargs)
container = tk.Frame(self)
container.pack(side="top",fill="both",expand = True)
container.grid_rowconfigure(0,weight=1)
container.grid_columnconfigure(0,weight=1)
self.frames={}
for F in (StartPage,PageOne,PageTwo,PageThree,FinalPage,HelpPage):
frame = F(container,self)
self.frames[F]= frame
frame.grid(row=0,column=0,sticky="nsew")
self.show_frame(StartPage)
## opens the file all the data will be stored in
def selectfolder(self):
folder=tkFileDialog.asksaveasfile()
self.file=folder
self.show_frame(PageOne)
def show_frame(self,controller):
frame=self.frames[controller]
frame.tkraise()
def rescalc(self,argCamDist,argSenWidth,argFocLen,argNumPix,cont): ## runs both equations for calculating spatial resolution
## part one: calculating HFOV
HFOV = float(argCamDist.get())*(float(argSenWidth.get())/float(argFocLen.get()))
## part two: calculating PixSize
self.PixSize = float(argNumPix.get())/HFOV
cont.show_frame(PageThree)
def GetNumbers(self,argNumImages,argNumPixX,argNumPixY,cont):
self.NumPixX=int(argNumPixX.get())
self.NumPixY=int(argNumPixY.get())
self.NumImages=int(argNumImages.get())
cont.file.write(str(self.NumImages))
cont.show_frame(PageTwo)
def ClipCalculator(self,argLabel,argtop,argleft,argbottom,argright,argNumPixX,argNumPixY,argNumImages,argLabel3,argLabel4,cont):
## calculates the number of pixels to be removed from each direction and writes it to a file
upper=int(self.PixSize*float(argtop.get()))+1
left=int(self.PixSize*float(argleft.get()))+1
if cont.cnt==1:
bottom=int(argNumPixY)-(int(self.PixSize*float(argbottom.get()))+1)
right=int(argNumPixX)-(int(self.PixSize*float(argright.get()))+1)
cont.width=right-left
cont.height=upper-bottom
else:
bottom=upper+cont.height
right=left+cont.width
cont.file.write('upper left: rows:{0}:columns:{1} \n'.format(upper,left))
cont.file.write('upper right: rows:{0}:columns:{1} \n'.format(upper,right))
cont.file.write('lower left: rows:{0}:columns:{1} \n'.format(bottom,left))
cont.file.write('lower right: rows:{0}:columns:{1} \n'.format(bottom,right))
cont.cnt+=1
##updates label and resets entry windows to default then refreshes Page
argLabel['text']="Image Number {0}".format(cont.cnt)
argtop.delete(0,tk.END)
argtop.insert(0,"0.0")
argleft.delete(0,tk.END)
argleft.insert(0,"0.0")
argbottom.delete(0,tk.END)
argbottom.insert(0,"0.0")
argright.delete(0,tk.END)
argright.insert(0,"0.0")
cont.refresh(argbottom,argright,argLabel3,argLabel4,cont)
def refresh(self,Label3,Label4,entry3,entry4,cont):
if cont.cnt==1:
cont.show_frame(PageTwo)
if (cont.cnt > 1 and cont.cnt <= cont.NumImages):
Label3.forget()
Label4.forget()
entry3.forget()
entry4.forget()
cont.show_frame(PageTwo)
else:
cont.file.close()
cont.show_frame(FinalPage)
class StartPage(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label=tk.Label(self,text="Image Overlap Program V 1.0")
label.pack(pady=10,padx=10)
button1 = tk.Button(self, text="Help", command=controller.show_frame(HelpPage))
button1.pack()
button2 = tk.Button(self, text="Select Folder", command=lambda: controller.selectfolder())
button2.pack()
class PageOne(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label3=tk.Label(self,text="Camera Parameters")
label3.pack(pady=10,padx=10)
label1=tk.Label(self,text="Camera Distance").pack()
entry1=tk.Entry(self)
entry1.insert(0,"0.0")
entry1.pack()
label2=tk.Label(self,text="Sensor Width").pack()
entry2=tk.Entry(self)
entry2.insert(0,"0.0")
entry2.pack()
label3=tk.Label(self,text="Focal Length").pack()
entry3=tk.Entry(self)
entry3.insert(0,"0.0")
entry3.pack()
label4=tk.Label(self,text="Number Of Pixels").pack()
entry4=tk.Entry(self)
entry4.insert(0,"0.0")
entry4.pack()
button1=tk.Button(self,text='run',command = lambda: controller.rescalc(entry1,entry2,entry3,entry4,controller))
button1.pack()
button3 = tk.Button(self, text="Home", command=lambda: controller.show_frame(StartPage))
button3.pack()
class PageTwo(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
cont=controller
argNumPixX= cont.NumPixX
argNumPixY= cont.NumPixY
argNumImages= cont.NumImages
title=tk.Label(self,text="Distance Parameters")
title.pack(pady=10,padx=10)
Label5=tk.Label(self,text="Image Number {0}".format(cont.cnt))
Label5.pack()
Label1=tk.Label(self,text="How many m of the image needs to be removed from the top")
Label1.pack()
entry1=tk.Entry(self)
entry1.insert(0,"0.0")
entry1.pack()
Label2=tk.Label(self,text="How many m of the image needs to be removed from the left")
Label2.pack()
entry2=tk.Entry(self)
entry2.insert(0,"0.0")
entry2.pack()
Label3=tk.Label(self,text="How many m of the image needs to be removed from the bottm")
Label3.pack()
entry3=tk.Entry(self)
entry3.insert(0,"0.0")
entry3.pack()
Label4=tk.Label(self,text="How many m of the image needs to be removed from the right")
Label4.pack()
entry4=tk.Entry(self)
entry4.insert(0,"0.0")
entry4.pack()
button1=tk.Button(self,text="Run1",command= lambda: controller.ClipCalculator(Label5,entry1,entry2,entry3,entry4,argNumPixX,argNumPixY,argNumImages,Label3,Label4,cont))
button1.pack()
button3 = tk.Button(self, text="Home", command=lambda: controller.show_frame(StartPage))
button3.pack()
class PageThree(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
title=tk.Label(self,text="Image Parameters")
title.pack(pady=10,padx=10)
label1=tk.Label(self,text="How many images in a set").pack()
entry1=tk.Entry(self)
entry1.insert(0,"0.0")
entry1.pack()
label2=tk.Label(self,text="How many pixels in the X direction").pack()
entry2=tk.Entry(self)
entry2.insert(0,"0.0")
entry2.pack()
label3=tk.Label(self,text="How many pixels in the y direction").pack()
entry3=tk.Entry(self)
entry3.insert(0,"0.0")
entry3.pack()
button2 = tk.Button(self, text="Run", command=lambda: controller.GetNumbers(entry1,entry2,entry3,controller))
button2.pack()
button1 = tk.Button(self, text="Home", command=lambda: controller.show_frame(StartPage))
button1.pack()
class FinalPage(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label2=tk.Label(self,text="DONE")
label2.pack(pady=10,padx=10)
button2 = tk.Button(self, text="Home", command=lambda: controller.show_frame(StartPage))
button2.pack()
class HelpPage(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label2=tk.Label(self,text="Help Page")
label2.pack(pady=10,padx=10)
button2 = tk.Button(self, text="Home", command=lambda: controller.show_frame(StartPage))
button2.pack()
app=Application()
app.mainloop()
非常感谢任何帮助
最佳答案
简单的修复方法是在 StartPage
中设置帮助按钮的命令属性时使用 lambda。
您当前正在调用 tk.Button
时调用函数 controller.show_frame(HelpPage)
,而您可能打算在按钮时调用它被按下。
所以而不是
button1 = tk.Button(self, text="Help", command=controller.show_frame(HelpPage))
使用
button1 = tk.Button(self, text="Help", command=lambda: controller.show_frame(HelpPage))
就像代码中其他地方一样。
关于Python tkinter "KeyError: <class __main__."错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949002/
对于我的家庭作业,如果用户输入的键(文本)包含任何非字母字符并重新提示,我被告知要引发一个键错误。到目前为止,我有这个似乎有效但显然没有使用预期的 try/except 结构 key=input("P
编写try/except语句时,是否使用 except KeyError: 或 except KeyError as e: 我得到了相同的结果。 两者有什么区别? KeyError as e 只是更具
我在使用 Python Flask 和 Flask-Mail 库时遇到问题。 我收到一个错误: KeyError: 'mail' 谁能帮我解决这个问题? 我的代码是: # -*- coding: ut
我正在尝试获取 Twitter 登录页面中的隐藏元素。我遵循的过程只是获取该页面中的隐藏元素。但问题是,当我尝试获取这些元素的值时,我遇到了关键错误。代码是: import requests,
我正在尝试将 atexit 处理程序添加到我的代码中。但我发现如果我导入了线程模块,它会给我一个 KeyError 异常。这是 python 线程模块中的错误吗? #!/usr/bin/python2
我正在从 Python2.7 numba 代码转换为 Python3.4。此函数pairwise_distance 将多维数组X 和Y 转换为距离矩阵。 但是,我使用 numba 装饰器 @jit 来
我有 2 个用于生产和开发的独立设置文件以及一个通用的 base.py 设置文件 base.py SECRET_KEY = r"!@#$%^&123456" prod.py from .base im
下面的代码 for k in list(g_score.keys()): print(g_score[k]) 返回 KeyError对我来说: Traceback (most recent c
我收到了一份。在Spyder中第二次从子文件夹导入库时出错,但第一次(重新启动Spyder后)或在Spyder外导入时工作正常。。代码是:。其中,test_lib.py只是。输出结果为:。当库不在子文
我希望以下列方式获取一个对象: Collection.objects.get(name='name', type='library', owner=owner, parent=parent) 不幸的是
如何加入这两个文本文档? 文档 1: 1000001 10:0.471669 250:0.127552 30:0.218773 64:0.249413 1000002 130:0.0839656 10
这段代码有什么问题? 这是我的 HTML: File: 这是我的 Python 脚本: #! /usr/bin/env python import os, sys; from mod_py
我正在尝试在 Linux 中使用 cron 运行一个 Python 脚本,它应该构建一个数据字典。我正在尝试使用 datetime().now().time() 作为字典中的键,但它似乎会引发错误。
我正在尝试更改列或处理列,但出现一些 keyError 错误。从事芝加哥犯罪数据分析工作。 例如当我尝试运行时 ds["DATE OF OCCURRENCE"] = pd.to_datetime([d
我有一个包含以下列的数据框,我只是想通过转换现有列来添加新列。我不明白为什么我会收到此错误,特别是考虑到数据框很好并且我可以在 Zip 上使用 groupby 而不会出现任何索引问题。 print(d
我正在尝试使用 ffmpeg 从视频文件中获取分辨率高度和音频比特率,但出现以下错误,但并不能告诉我太多信息: File "/home/user/code/python/reduce_video_si
我正在为每个单独的州分配区域。我的代码从一个 excel 文件中读取,大约有 30k 行。我建立了一个字典,将每个州分配给一个地区,并为每个州名称分配州缩写。我正在尝试创建一个列来填充每个行项目的区域
我仍在努力学习 Python 词典的来龙去脉。当我运行这个: #!/usr/bin/env python3 d = {} d['foo']['bar'] = 1 我收到 KeyError: 'foo'
我正在尝试使用 Tensorflow 训练线性回归器。 如果我通过自动确定实值列来实例化学习器,则拟合工作正常。 auto_feature_columns = tf.contrib.learn
我正在尝试编写一个可以从YouTube下载整个播放列表的代码。它适用于某些播放列表,但不适用于少数播放列表。我在下面的代码中显示的播放列表之一。也可以随时在此代码上添加更多功能。 如果已有下载该播放列
我是一名优秀的程序员,十分优秀!