1.运行main.py,在界面上点击FTP按钮,显示子页面,我在FTP_01子页面打开后,通过"start"按钮实现了FTP拷贝文件,但我现在向要在执行"conn_FTP"功能的时候不断向main_00主页面的textBrowser写执行状态,就是下面图里这些向主页面写入.

主界面:

子界面

2.程序
main.py
# region import 导入
from PyQt5.Qt import *
import sys
from UiEntrance import *
# endregion
# region 运行实现
if __name__ == '__main__':
# 下一行作用:解决不同分辨率下UI文字显示不全的问题
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
mainWindow = main_00()
mainWindow.show()
sys.exit(app.exec_())
# endregion
UiEntrance.py
# # region import 导入
from PyQt5.Qt import *
import sys
from myUI import Ui_MainWindow as my_Main_00
from myUI_FTP import Ui_FTP as my_FTP_01
from PyQt5 import QtCore, QtGui, QtWidgets
from ctypes import *
from ctypes.wintypes import POINT
from ctypes.wintypes import BOOL
from operator import index
from pickle import FALSE, TRUE
from xml.etree import ElementTree as ET
import time
import _ctypes
import platform
import ctypes
import binascii
import struct
import myOpenNR
import re
import xml.dom.minidom
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton
from PyQt5.QtGui import QIntValidator
import os
import ftplib
from ftplib import FTP
from PyQt5.QtCore import pyqtSignal
# endregion
class main_00(QMainWindow, my_Main_00):
def __init__(self):
super(main_00, self).__init__()
self.setupUi(self)
self.this_showFTP = None
self.button_click()
def initUI(self):
print("show : mian_00")
def button_click(self):
self.pushButton_Ui_FTP.clicked.connect(self.show_FTP)
# 显示FTP_01页面
def show_FTP(self):
self.this_showFTP = FTP_01()
self.this_showFTP.show()
# 获取IP
IP = self.lineEdit_robot_ip.text()
# 将IP传入【this_showFTP】
self.this_showFTP.setIP(IP)
class FTP_01(QWidget, my_FTP_01):
# Qt信号: data_textBrowser
data_textBrowser = pyqtSignal(str)
def __init__(self):
super(FTP_01, self).__init__()
self.ftp_ip = None
self.setupUi(self)
self.initUI()
self.button_click1()
self.sub_main00 = None
self.return_CopyFile = 0
def initUI(self):
print("show : FTP_01")
def button_click1(self):
self.pushButton_Start.clicked.connect(self.conn_FTP)
def setIP(self, IP):
self.lineEdit_IP.setText(IP)
def conn_FTP(self):
FTP_step = ""
# 提取IP地址
# self.lineEdit_IP.setText(IP)
self.ftp_ip = self.lineEdit_IP.text()
copy_file = self.lineEdit_FileName.text()
# FTP connect
print(f"conn_FTP: connecting...{self.ftp_ip}")
myftp = ftplib.FTP()
myftp.connect(self.ftp_ip, 21)
# FTP login
print(f"conn_FTP: login...")
myftp.login("1", "1")
# FTP login Success / Fail ?
login_feedback = myftp.welcome
int_login_feedback = int(login_feedback[0: 3])
if 200 <= int_login_feedback <= 299:
print(f"conn_FTP: FTP Login Success. code={int_login_feedback}")
else:
print(f"conn_FTP: FTP Login Fail. code={int_login_feedback}")
str_back = str(f"conn_FTP: FTP Login Fail. code={int_login_feedback}")
# local dir:保存文件的本地地址
local_dir = "D:\myLog"
# 导向FTP路径
myftp.cwd(f'{self.lineEdit_filePath.text()}')
print("conn_FTP: 导向FTP路径:成功!")
# 获取文件夹内所有文件名称
ftp_file_list = myftp.nlst()
# 判断电脑上的路径是否存在,如不存在,则创建路径
if not os.path.exists(local_dir):
print(f"conn_FTP: 路径不存在,创建路径... ...")
os.makedirs(local_dir)
print(f"conn_FTP: 创建路径完成!")
# 检查“语言形式”文件是否存在
if copy_file in ftp_file_list:
print("conn_FTP: %s 找到了,开始复制..." % copy_file)
# FTP复制文件的固定格式
my_file_dir = os.path.join(local_dir, copy_file)
my_file_handle = open(my_file_dir, 'wb')
stat_source = myftp.retrbinary('RETR %s'%copy_file, my_file_handle.write)
print(f"conn_FTP: {stat_source}")
else:
print("conn_FTP: %s 不存在!不执行复制~" % copy_file)