PyQt5+socket编程界面卡住未响应

现象:

  • 在利用PyQt5,python,socket编写网络调试上位机时,遇到了GUI界面卡住未响应,然后崩掉的问题。
  • NetAssist 网络调试助手

原因:

  • 建立socket通信中,很多地方都用了while True无限循环,这是为了保持服务器监听或者是客户端接收数据。在命令行界面中,这样写while True到没什么问题,并不会导致崩溃问题。但在pyqt中,gui界面本身就是一个主线程,如果直接通过点击按钮进入服务器监听或者是客户端连接,这个时候就会立刻进入socket编程中的while True无限循环,这个循环是直接跑在了当前的主线程中,这是一个非常耗时的操作。在windows下,系统会认为这个程序运行出错了,则会自动显示未响应,进而关闭程序。

解决方法:

  • import threading
  • 为socket通信开辟新线程即可,将通信部份的while True循环和GUI界面的主线程区分开来,这样就不会出现图形界面未响应的问题。

新建线程的方法

socket通信tcp服务器模式为例:

  • 如果服务器要满足多个客户端同时接入,同时传递消息且不会相互干扰,那么需要给监听创建一个线程,也要给每个连接创建另一个线程。这里说一下思路,tcpserver的建立中有两个while True循环,要为每个循环创建一个线程才行。
  • 关于tcp服务器模式的例子,可以参考这里https://github.com/nicedayzhu/netAssist/blob/master/tcp_Logic.py

socket通信tcp客户端模式为例:

def socket_open_tcpc(self):
"""
    按钮启动客户端模式,开启客户端socket
"""
    .
    .    这里表示其他函数
    .
    # 为客户端模式创建一个新线程
    self.client_th = threading.Thread(target=self.tcp_client_concurrency)
    # 设置线程为守护线程,防止退出主线程时,子线程仍在运行
    self.client_th.setDaemon(True)
    # 新线程启动
    self.client_th.start()

def tcp_client_concurrency(self)
"""
    功能:这是开启线程后的处理函数,socket通信中的while True循环要写在这里
"""

参考资料:

### 回答1: PyQt5是一个基于Qt的Python GUI开发框架,提供了丰富的GUI组件和工具库,MySQL是一个广泛应用的关系型数据库管理系统。PyQt5和MySQL结合起来可以实现MySQL数据库的可视化操作界面。 在实现PyQt5 MySQL界面化的过程中,我们可以采用一些常用的工具库,例如PyMySQL和QSqlTableModel。PyMySQL是一个用于Python的MySQL数据库连接库,可以实现与MySQL的交互与操作,使PyQt5能够与MySQL进行连接。而QSqlTableModel是PyQt5自带的模型类,主要用于与数据库表进行交互,这样我们就可以在PyQt5界面上显示和编辑MySQL数据库中的数据。 在使用PyQt5和MySQL进行连接和数据交互时,需要配置数据库连接信息,包括MySQL服务器IP地址、端口、用户名、密码等信息,并创建表格模型对象,使用模型对象对MySQL数据库中的表进行CRUD操作。在界面设计方面,我们可以使用PyQt5中的控件(例如QTableView、QPushButton、QLineEdit)和布局管理器(例如QHBoxLayout和QVBoxLayout)实现简单且美观的可视化操作界面PyQt5 MySQL界面化可以帮助我们更加方便地管理和操作MySQL数据库,具有良好的用户体验和可扩展性,可以为开发人员和企业提供更多的应用场景和商业价值。 ### 回答2: PyQt5是一个Python编程语言下的GUI(图形用户界面)工具包,其主要功能是提供创建图形交互界面的API和库。同时,MySQL是一种常用的开源关系型数据库管理系统。 如果需要将PyQt5与MySQL相结合,以实现对数据库的访问和操作,可以通过使用PyMySQL库实现。这个库可以连接到MySQL数据库,并允许与MySQL服务器交互,例如执行查询、修改或删除操作。 接下来需要创建一个GUI程序,在 PyPlot 或 PyQT5 中实现界面化操作。首先需要设置连接属性,包括MySQL的用户名、密码和数据库名称等基本信息。然后需要在GUI界面中添加一些控件,例如按钮、文本框和表格等,并配置事件响应函数,以实现对MySQL数据库的操作。 例如,在PyQt5中可以使用QTableWidget创建一个表格,通过调用PyMySQL库中的函数,将查询结果填入表格中。同时,可以使用QLineEdit控件实现用户输入参数,并通过PyMySQL库将其传递给MySQL服务器。 PyQt5和MySQL的结合可以实现一个强大的图形式数据库编辑器,让用户方便地浏览、管理和分析数据。 ### 回答3: PyQt5是一个Python编程语言的GUI开发框架,可以很方便的开发出跨平台的GUI应用程序。MySQL是一款免费、开源的关系型数据库管理系统,可以用来存储和管理大量的数据。将两者结合起来,可以使得用户在图形化界面下操作MySQL数据库,这就是pyqt5 mysql界面化。 在实现pyqt5 mysql界面化的过程中,需要使用到PyQt5和MySQL的库。PyQt5库提供了对GUI的支持,而对于MySQL的操作,可以使用Python标准库中的MySQLdb库或者是PyMySQL库。在使用PySQL库进行MySQL的操作时,需要注意保证MySQLdb库或者PyMySQL库在Python的运行环境中安装好。 在开发界面时,可以使用PyQt5提供的Qt Designer工具,可视化的进行界面设计。在界面中可以添加按钮、文本框、表格等组件,通过PyQt5的信号槽机制,将这些组件与MySQL的操作进行绑定。当用户在界面上点击按钮或者提交了查询信息时,就可以调用MySQL的操作进行数据的增删改查操作了。 在实现pyqt5 mysql界面化时,需要注意保证程序的安全性和稳定性。应该遵循最小权限原则,保证只有经过授权的用户才能进行访问数据库。对于用户输入的数据,也需要进行合法性验证和SQL注入的过滤,防止出现安全漏洞。 总之,pyqt5 mysql界面化是一个实现复杂功能的好方法。它让用户可以在一张漂亮的图形界面下操作数据库,从而提高了效率和便捷性。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值