一、在pyqt中插入图片的方法(基于Qt Designer):

(1)创建.qrc文件,在Qt Designer进行添加

(2)选用Label组件,在属性中使用pixmap进行添加,选择文件即可

pyqt5存储图片到mysql数据库_子窗口

 (3)选用各种button组件,使用icon即可,比较推荐使用Tool Button(可以在按钮中插入图片和文字并改变两者的排版)

pyqt5存储图片到mysql数据库_Qt_02

 

pyqt5存储图片到mysql数据库_python_03

二、改变组件的样式

        其实pyqt的qss和html中的css极度相似,语法也一样,可以参照css写法改变组件样式。选择组件,右键选择改变样式表即可。样例分别是边框圆角、背景颜色、文字颜色、边框的编辑。

pyqt5存储图片到mysql数据库_pyqt5_04

pyqt5存储图片到mysql数据库_python_05

border-radius: 4px;
background-color: rgb(230, 255, 255);
color: rgb(0, 0, 255);
border: 1px solid #45a8ff;
background-repeat: no-repeat;

三、子窗口向主窗口传值

        这里主要采用信号与槽(槽理解为函数)机制。在子窗口中创建一个信号,设置按钮点击后发送数据给主窗口;在主窗口中创建一个子窗口对象,通过这个对象调用信号获得发送的数据,通过getData在moxing_choose_label中显示。这个略显麻烦,可以看下一个。

class model_choose_Window(QMainWindow):   #子窗口
    _signal=QtCore.pyqtSignal(str)      #实例化一个信号,传输一个字符串, <---1
    def __init__(self, parent=None):
        super().__init__(parent)                 #创窗体
        self.ui = Ui_choose_model_MainWindow()   #创对象
        self.ui.setupUi(self)                                               

        self.ui.save_pushButton_1.clicked.connect(self.slot1)    #点击save_pushButon_1后执行slot1函数   <--2

        def slot1(self):      #<--3
            model_str='传的我'
            self._signal.emit(model_str)     #emit就是发送这个字符串
        

class Main_Window(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)  # 基操1:调用父类构造函数:创建窗体,传值不用看这句
        self.ui = Ui_MainWindow()  # 基操2:创建UI对象,传值不用看这句
        self.ui.setupUi(self)      #基操3:实例化UI对象的类,传值不用看这句
        
        self.model_choose_ui = model_choose_Window(self)  #在主窗口中创建子窗口的model_choose_Window对象     #<--4
        self.model_choose_ui._signal.connect(self.getData)  #调用子窗口的信号,连接getData
#<-- 5

    def getData(self, parameter):   #在主窗口的moxing_choose_label下显示子窗口传过来的str
        self.ui.moxing_choose_label.setText(parameter)

四、主窗口给子窗口传值

        个人感觉实质上,主或子窗口没多大区别。A给B传值,就在A中创建一个信号,连接B中的某个函数,将A的某个值用emit传给连接的B中函数来获取。 实际上可以传很多类型的值,包括多个值、list等等,见参考链接。

class Main_Window(QMainWindow):
    signal_2 = QtCore.pyqtSignal(str)    #创建信号   <----1

    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类构造函数,创建窗体
        self.ui = Ui_MainWindow()  # 创建UI对象
        self.ui.setupUi(self)      #这三行是qt designer转py文件后自带的,不管

        self.picture_show_ui = picture_show_Window(self)   #创建子窗口<----2
        self.signal_2.connect(self.picture_show_ui.getData1) #用信号连接子窗口的getData1函数
    
    def wuguan(self):
        self.signal_2.emit('send_data')   #传的值,传给连接的函数

class picture_show_Window(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_picture_show_MainWindow()
        self.ui.setupUi(self)       #这三行不需要看

    def getData1(self, str):      #获取传过来的值
        self.ui.textBrowser.append(str)

注意事项:

1.在Qt Designer中使用组件,尽量第一时间修改Object name,方便在后续的编程中识别。

2.可以使用on_按钮名_clicked(self),直接对按钮触发后的事件进行编写。记得加上pyqtSlot注解

@pyqtSlot()
    def on_toolButton_model_clicked(self):
        self.model_choose_ui.show()    #点击按钮后出现新的界面

3.弹出框的使用:

QMessageBox.warning(self, "提示", "输入数字不合法, 请重新输入!",
                                QMessageBox.Yes | QMessageBox.No,
                                QMessageBox.Yes)