首先,我在Python,Stackoverflow和一般编程方面都很陌生,所以请原谅我可能做出的任何正式错误,因为我仍在努力掌握许多必需的概念编程协议。
问题在于: 我试图解决我在使用Tkinter时遇到的一个特定的,看似简单的问题:每当我摆弄一些令我困惑的代码时,通常需要多次尝试才能找到一个工作方案。所以我写了一些代码,运行它,得到一个错误,做了一些更改,再次运行它,得到另一个错误,再次更改......等等,直到达到工作结果。
当代码终于工作时,我很遗憾地还会为我执行的每次失败的运行都弹出额外的Tkinter主窗口。因此,如果我在最终实现工作代码之前做了20次更改,则会弹出20个额外的Tkinter窗口。烦人...
现在,我在考虑使用try / except处理异常可能会避免这种情况,但我不确定如何正确地完成此操作。
我一直在寻找解决方案,但似乎无法找到解决此问题的帖子。我其实并不确定如何正确地表达问题......有人对此有一些建议吗?
以下显示了一个简单但却失败的尝试,我试图绕过这个。代码按原样运行,但是如果你在代码中输入一些错误,运行它几次,然后撤消拼写错误并再次运行代码,你将获得多个Tkinter窗口,这就是我所做的。我试图避免。
当然,任何帮助都表示赞赏...... (顺便说一下,我使用Python 2.7.13。)
import Tkinter as tk
class App(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self)
self.root = parent
self.canvas = tk.Canvas(self)
self.canvas.pack(expand=1,fill='both')
self.bindings()
def click(self,e):
print 'clicked'
def bindings(self):
self.root.bind('<1>',self.click)
def main():
root = tk.Tk()
app = App(root)
app.pack()
root.mainloop()
if __name__ == '__main__':
try:
main()
except:
print 'Run failed...'
答案 0 :(得分:1)
好的,太好了。问题确实与Tkinter或Python无关,而是与IDE本身无关。谢谢Ethan指出这一点。
PyScripter有几种模式或引擎。我一直在运行带有内部引擎的脚本,这种脚本速度更快但不会在每次运行时重新初始化。我相信这会导致问题。另一方面,远程引擎会在每次运行时重新初始化。这可以避免运行弹出窗口失败。
下面的PyScripter手册中有一个更深入的解释:
Python引擎:
- 内部
如果出现问题,它比其他选项更快 您正在运行或调试的脚本可能会影响 PyScripter的可靠性并可能导致崩溃。另一个限制 这个引擎是它无法运行或调试GUI脚本也是如此 重新初始化。
- 远程
这是PyScripter的默认引擎,是推荐的引擎 对于大多数Python开发任务。它运行在子进程中 使用rpyc与PyScripter通信。它可以用来运行和 调试任何类型的脚本。但是,如果您运行或调试GUI脚本 可能必须在每次运行后重新初始化引擎。
- Remote Tk
这个远程Python引擎专门用于运行和调试 Tkinter应用程序包括使用Tkagg后端的pylab。它也是 支持以交互模式运行pylab。引擎激活了一个 Tkinter mainloop并用虚函数替换mainloop 您正在运行或调试的Tkinter脚本不会阻止 发动机。您甚至可以使用。开发和测试Tkinter小部件 交互式控制台。
- 远程Wx
这个远程Python引擎专门用于运行和调试 wxPython应用程序包括使用WX和WXAgg后端的pylab。 它还支持在交互模式下运行pylab。引擎 激活wx MainLoop并用假人替换MainLoop 函数,以便您正在运行或调试的wxPython脚本 不阻挡发动机。你甚至可以开发和测试wxPython Frames 和使用交互式控制台的应用程序请注意这个引擎 防止wxPython输出的重定向,因为这会阻止 与Pyscripter的沟通。
使用Tk和Wx远程引擎时,您当然可以运行或调试 任何其他非GUI Python脚本。但请记住这些 因此,引擎可能比标准远程引擎稍慢 它们还包含GUI主循环。还要注意这两个引擎 使用虚拟过程覆盖sys.exit函数。