我是Eclipse neon + Pydev combo的初学者。 尝试使用我创建的其他模块创建的python模块。 首先,我将使用此处概述的TKinter教程: http://effbot.org/tkinterbook/tkinter-hello-again.htm
除了打印语句以响应鼠标点击之外,我想运行一个小模块,fibo.py
这是我的代码:
import the library
from tkinter import *
import fibo
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(
frame, text="QUIT", fg="red", command=frame.quit
)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello",command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
fib(100)
print ("hi there, everyone!")
root = Tk()
app = App(root)
root.mainloop()
root.destroy() # optional; see description below
这里的fibo.py
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print (b, end=" ")
a, b = b, a+b
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
两个模块都在同一个项目和工作区中。 编辑说,&#34;未解决的导入fibo&#34; 为什么模块fibo在pydev / eclipse中无法识别?
我的最终目标是在点击按钮时运行模块。如果有更直接的方法来实现这一点,我想知道。
答案 0 :(得分:2)
好的,基于你的截图,你的结构实际上是:
/project (this is the PYTHONPATH root and marked as source folder)
/project/root
/project/root/__init__.py
/project/root/nested
/project/root/nested/__init__.py
/project/root/nested/example.py
/project/root/nested/fibo.py
在这种情况下,您的导入应为:from root.nested import fibo
。您的代码可能在命令行中运行,但这是因为您仅在运行时向sys.path
添加了一个条目(因此,PyDev无法遵循该条目)。
另一个选项是将example.py和fibo.py移动到/project
。
您也可以将相对导入用作from . import fibo
,但是,要将模块作为__main__
模块运行,您必须按模块名称运行模块(使用{ {1}}标志) - 您可以配置PyDev在-m
。
请注意,如果你只是写:
在您的情况下 preferences > PyDev > Run > Launch modules with "python -m mod.name"
,并等待显示未定义的变量错误,您可以在同一行中使用 Ctrl + 1 来获取将为您编写导入的建议(或者您可以执行代码完成,也会自动为您编写导入)。