sunjunjoe 2025-02-27 14:28 采纳率: 100%
浏览 2
已结题

我现在向要在执行"conn_FTP"功能的时候不断向main_00主页面的textBrowser写执行状态

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

img


主界面:

img

子界面

img

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)


  • 写回答

3条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-02-27 14:32
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    要在执行"conn_FTP"功能的时候不断向main_00主页面的textBrowser写执行状态,可以通过信号和槽机制来实现。在FTP_01子页面中定义一个信号data_textBrowser,然后在conn_FTP()函数中发射这个信号,将需要写入的执行状态传递给主页面的textBrowser。 下面是代码示例:
    # UiEntrance.py
    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, pyqtSignal
    from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton
    from PyQt5.QtGui import QIntValidator
    import os
    import ftplib
    from ftplib import FTP
    from PyQt5.QtCore import pyqtSignal
    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)
        def show_FTP(self):
            self.this_showFTP = FTP_01()
            self.this_showFTP.data_textBrowser.connect(self.update_textBrowser) # connect the signal to update_textBrowser slot
            self.this_showFTP.show()
            IP = self.lineEdit_robot_ip.text()
            self.this_showFTP.setIP(IP)
        def update_textBrowser(self, status):
            self.textBrowser.append(status)
    class FTP_01(QWidget, my_FTP_01):
        data_textBrowser = pyqtSignal(str) # define signal
        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 = ""
            self.ftp_ip = self.lineEdit_IP.text()
            copy_file = self.lineEdit_FileName.text()
            self.data_textBrowser.emit(f"conn_FTP: connecting to {self.ftp_ip}...") # emit the signal with status
            myftp = ftplib.FTP()
            myftp.connect(self.ftp_ip, 21)
    

    在上面的代码中,我们定义了一个data_textBrowser信号,并在conn_FTP()函数中使用data_textBrowser信号发射执行状态到主页面的textBrowser。在主页面main_00中,我们连接了这个信号与update_textBrowser函数,以实现不断向主页面写入执行状态。 希望这样可以帮助到您。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日