在同一个文件夹下
调用一个函数
delete.py文件(被调用的文件,(记得不要用4.py这样的数字作为被调用的文件否则无法调用,执行文件可以,例如下面的sky.py可以改为4.py))
def add(x,y):
print('和为:%d'%(x+y))
sky.py文件
import delete
delete.add(1,2)
或者
from delete import add
add(1,2)
调用一个类
delete.py文件(被调用的文件)
class A:
def __init__(self,xx,yy):
self.x=xx
self.y=yy
def add(self):
print("x和y的和为:%d"%(self.x+self.y))
sky.py文件
from delete import A
a=A(2,3)
a.add()
或者
import delete
a=delete.A(2,3) # 这个也是一个传参的手段
a.add()
在不同文件夹下
delete.py文件的文件路径:E:\PythonProject\winycg
import sys
sys.path.append(r'E:\PythonProject\winycg')
'''python import模块时, 是在sys.path里按顺序查找的。
sys.path是一个列表,里面以字符串的形式存储了许多路径。
使用A.py文件中的函数需要先将他的文件路径放到sys.path中'''
import A
a=delete.A(2,3)
a.add()
其他补充:
delete.py文件(被调用的文件)
def app_lost(x):
print('%s : Hello !'%x)
print(3)
a='Matting'
app_lost(a)
print(4)
sky.py文件
from delete import app_lost
k='Karry'
print(1)
if __name__ == "__main__":
app_lost(k)
print(2)
执行结果为
Matting : Hello !
3
4
1
Karry : Hello !
3
2
如果不想执行delete的其他东西,只想用它的函数那么就要封装
def app_lost(x):
print('%s : Hello !'%x)
print(3)
a='Matting'
if __name__ == "__main__": # 封装,只有自己执行这个文件才会执行下面的语句
app_lost(a)
print(4)
参考:https://blog.csdn.net/winycg/article/details/78512300
背景pyqt
1.对于类中函数要用一个变量来做判断(用self.函数)
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
self.retranslateUi(self)
self.last_result = -1 # 一个判断机制变量
def press_picture(self): # qt里面一个按钮触发press_picture槽函数,(python里面只会执行放在一个行的语句,这里有个tab空格所以不会执行得到
if last_max != self.last_result:
print(self.last_result)
2.函数之间调用变量(还是加global)
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
self.retranslateUi(self)
def press_picture(self):
global k # 让k变为全局变量
k=3
def fly(self):# 也是一个槽函数
y=k+1
print(y) k=4
3.变量在类外面也是一样加global
pic_name_num = 1
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
self.retranslateUi(self)
def press_picture(self):
global pic_name_num # 反正哪里用到了都要加global
global model
if (pic_name_num == 1):
model =XXXXXXX
4.pyqt里面的调用函数(只是举例子看看就好)
class MyWindow(QMainWindow, Ui_MainWindow):
def ShowCameraOneImage(self):
self.keyPressEvent() # 加了self才可以调用其他函数
def keyPressEvent(self,event):
if (event.key() == Qt.Key_A):
print('hello,‘a’')
else: print(777)
5.如果一个文件调用另一个问价变量有两种方式
1.aaa.py里面
uuu=6
class MyWindow(QMainWindow, Ui_MainWindow):
print(uuu) #6
bbb.py里面
class Ui_Dialog5(QtWidgets.QWidget,Ui_Form):
def __init__(self):
from aaa import uuu # 这样调用其实是一个副本,也就是局域变量,这里改变不会影响aaa.py里面的值
uuu = uuu+4
print(uuu) # 10
2.用pickle(directory1就是变量)
class Ui_Dialog3(QtWidgets.QWidget,Ui_Form):
def __init__(self):
super(Ui_Dialog3,self).__init__()
self.setupUi(self)
self.setWindowTitle("训练窗口")
self.retranslateUi(self)
self.setWindowIcon(QIcon('logo.png'))
if not os.path.exists('/home/test3_1.txt'):
os.mknod('/home/test3_1.txt')
f = open('/home/test3_1.txt', 'rb')
if os.path.getsize('/home/test3_1.txt'):
d = pickle.load(f)
self.lineEdit.setText("%s" % (d))
f.close()
def browse(self):
# global directory1
global k
global directory1
directory1 = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/") # 起始路径
self.lineEdit.setText("%s" % (directory1))
c = directory1
f = open('/home/test3_1.txt', 'wb')
pickle.dump(c, f)
f.close()
关于import X 还有from x import * 这个问题
import 模块:导入一个模块;注:相当于导入的是一个文件夹,是个相对路径。
from…import:导入了一个模块中的一个函数;注:相当于导入的是一个文件夹中的文件,是个绝对路径。
不推荐使用from x import * 因为怕和原来文件下有一样的名字就会名字冲突,而且这句话意思是把这个文件里面的东西全部导入,所有函数还有变量。
明天再来多进程多线程