一、在pyqt中插入图片的方法(基于Qt Designer):
(1)创建.qrc文件,在Qt Designer进行添加
(2)选用Label组件,在属性中使用pixmap进行添加,选择文件即可
(3)选用各种button组件,使用icon即可,比较推荐使用Tool Button(可以在按钮中插入图片和文字并改变两者的排版)
二、改变组件的样式
其实pyqt的qss和html中的css极度相似,语法也一样,可以参照css写法改变组件样式。选择组件,右键选择改变样式表即可。样例分别是边框圆角、背景颜色、文字颜色、边框的编辑。
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)