PyQt5开发上位机

记录使用PyQt5写上位机的过程

安装

pip install PyQt5
pip install PyQt5-tools

安装tools是为了使用Qt-Designer(允许使用屏幕窗体和简单的拖放界面设计小部件、对话框或完整的主窗口)

在...\Python\Python37\Lib\site-packages\qt5_applications\Qt\bin 目录下可以找到 designer.exe 


使用 Qt-Designer:

参考文章

打开designer.exe,创建widget类对象,拖动摆放控件,做出初始界面(并固定窗口大小),保存成 .ui 文件

 

生成UI初始化代码

运行命令  pyuic5 -o xxx.py xxx.ui  生成 xxx.py文件,里面有UI的初始化代码

 

引用初始化代码来生成窗口:

from PyQt5.QtWidgets import QWidget
from xxx import Ui_widget

class Upper(QWidget, Ui_widget):    
    def __init__(self):
        super(QWidget, self).__init__()
        self.setupUi(self)
        self.show() 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Upper()
    sys.exit(app.exec_())

之后再自定义控件的属性、动作、信号等,这样就简化了很多布局控件的工作

 


多线程实现:

'''定义子线程'''
class thread_1(QThread):
    beam_signal = pyqtSignal(str)    #定义信号
    kill_flag = True    #采用标志位方便结束死循环子线程
    def __init__(self):
        super(thread_1, self).__init__()
    '''实现run方法,线程开启后自动执行该方法'''    
    def run(self):
        while self.kill_flag:
            self.mechine_signal.emit('xxxxx')    #信号发射

class Upper(QWidget, Ui_widget):    
    def __init__(self):        
        super(QWidget, self).__init__()
        self.notice1 = thread_1()    # 创建子线程实例
        self.notice1.beam_signal.connect(self.display)    #将信号连接到槽
        self.notice1.start()  #开启子线程

    def display(self, msg: str=''):
        self.textBrowser.setText(msg)

# 要结束该子线程,将 kill_flag 置为 False

 

  

  

 

 

 

posted @ 2021-01-30 23:49  Pio-GD  阅读(1059)  评论(0编辑  收藏  举报