Pyqt5常用技巧

翻译功能

多个饼图的制作

背景图片的调整

要了解控件有控件的颜色,背景色也有他的颜色,类似于ppt中的图层上移和下移。
所以要想做好一个统一的样式要配好颜色(最重要的),其次还要配置好控件的颜色比例,还有能不能把控件虚拟化(就是移入到背景色的下面)

设置整体背景色

1.使用QSS对mainwindow设置

win = QMainWindow()
win.setStyleSheet("#MainWindow{background-color: yellow}")

2.创建主题盒子,加入全局的背景色样式
本例是加入饼图的全局样式颜色。然后再根据盒子样式的颜色匹配对应的全局背景样式颜色

def createThemeBox(self): # 创建主题盒子
    themeComboBox = QComboBox()
    # 图标自带的颜色主题
    themeComboBox.addItem("Light", QChart.ChartThemeLight)
    themeComboBox.addItem("Blue Cerulean", QChart.ChartThemeBlueCerulean)
    themeComboBox.addItem("Dark", QChart.ChartThemeDark)
    themeComboBox.addItem("Brown Sand", QChart.ChartThemeBrownSand)
    themeComboBox.addItem("Blue NCS", QChart.ChartThemeBlueNcs)
    themeComboBox.addItem("High Contrast", QChart.ChartThemeHighContrast)
    themeComboBox.addItem("Blue Icy", QChart.ChartThemeBlueIcy)
    return themeComboBox

### 本例的self.windown() widget的自带的函数 猜的。但设定背景色使用setColor,调整背景色使用QPalette.Window
    pal = self.window().palette() # 设定全局背景颜色
    if theme == QChart.ChartThemeLight:
        pal.setColor(QPalette.Window, QColor(0xf0f0f0))
        pal.setColor(QPalette.WindowText, QColor(0x404044))
    elif theme == QChart.ChartThemeDark:
        pal.setColor(QPalette.Window, QColor(0x121218))
        pal.setColor(QPalette.WindowText, QColor(0xd6d6d6))
    elif theme == QChart.ChartThemeBlueCerulean:
        ## 设置背景颜色和标题颜色
        pal.setColor(QPalette.Window, QColor(0x40434a))
        pal.setColor(QPalette.WindowText, QColor(0xd6d6d6))
    elif theme == QChart.ChartThemeBrownSand:
        pal.setColor(QPalette.Window, QColor(0x9e8965))
        pal.setColor(QPalette.WindowText, QColor(0x404044))
self.window().setPalette(pal)

背景图片的透明化

必须把Pyqt5 中 QWidget控件中的放大,最小化,关闭,去除

self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)

然后在进行窗口的背景透明化

self.setAttribute(Qt.WA_TranslucentBackground,True)

控件的透明化

目前按钮可以透明化

def changeOpacity(myshow): # myshow传入的控件名称
    op = QtWidgets.QGraphicsOpacityEffect()
    op.setOpacity(0.5)
    myshow.setGraphicsEffect(op)
    myshow.setAutoFillBackground(True)

按钮控件的修饰

表单控件的修饰

多线程的操作

页面显示的方法

多个界面进行切换

辅助间隙的调节控件间的大小

控件自身大小的改变

布局之间的间隙

1.全局设置控件间距 setSpacing,适用于所有布局,快速简单的开发

## 全局对网格布局进行设置
self.layout = QGridLayout()
self.layout.setSpacing(60)

2.设置布局的伸缩量:addStretch 拉伸其实是默认右对齐的 默认addStretch值为0;并且不适用于网格布局

## 使水平布局中的控件可以居中显示
layout3.addStretch(1)
layout3.addLayout(layout1)
layout3.addStretch(2)
layout3.addLayout(layout1s) 
layout3.addStretch(1)

3.设置控件之间的间隙

# 仅在水平和垂直布局生效
self.spacerItem = QSpacerItem(20, 20, QSizePolicy.Minimum,
                                        QSizePolicy.Expanding)

两者无法共存在一个布局中

信号与槽函数

详情请看https://www.cnblogs.com/wkhzwmr/p/16353465.html
这里主要讲解页面的构成,以及页面的跳转,页面的生成可以由重写widget类来实现,可以同时重写多个类,这样的话要考虑的就是哪个页面显示在前,采用什么触发进而显示另外一个界面。

contact

pyqtSignal

左侧导航栏

构成这样的结构需要2个控件,分别是QListWidget,QStackedWidget。
QStackedWidget
堆栈窗口控件,在同一时间只有一个控件可以显示。利用该特性就可以动态的显示界面。(类似于QTabWidget)
切换的话需要借助QListWidget,在编写个函数连接当前的堆栈窗口的页面是多少(堆栈窗口的页面索引

## 获取堆栈窗口的页面索引
def display(self,i):
    self.Stack.setCurrentIndex(i)
## 编写切换QListWidget关联堆栈窗口
self.leftlist.currentRowChanged.connect(self.display)

至于QListWidget
是一个基于条目的接口,用于从列表中添加或删除条目。

		slm = QStringListModel(); # 默认插入的数组是字符串数组
		self.qList = ['Item 1','Item 2','Item 3','Item 4' ]	
		slm.setStringList(self.qList)
		listView.setModel(slm ) # 树,表格,list_view成型都要使用setModel
		# 关联点击触发事件
		listView.clicked.connect(self.clicked)		
		layout.addWidget( listView )
		self.setLayout(layout) 		 

上面的导航栏

QTabWidget
是个控件,控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面。可以通过addTab()将一个控件添加到Tab控件的选项卡中

self.tab1 = QWidget()
self.tab2 = QWidget()
self.tab3 = QWidget()
self.addTab(self.tab1,"Tab 1")
self.addTab(self.tab2,"Tab 2")
self.addTab(self.tab3,"Tab 3")

设定图标

要使用setIcon,这是大多数控件都可以用其来设定图标
例如:
1.树节点的添加图标

		# 设置子节点1
child1 = QTreeWidgetItem(root)
child1.setText(0,'child1')
child1.setText(1,'ios')
child1.setIcon(0,QIcon("./images/IOS.png"))
child1.setCheckState(0, Qt.Checked)

2.在表格中使用的话,就是在表格中填充图片

			item = QTableWidgetItem()  
			item.setFlags(Qt.ItemIsEnabled)  #用户点击时表格时,图片被选中  
			icon = QIcon(r'.\images\bao%d.png' % k  ) 
			item.setIcon(QIcon(icon )  )  
									
			print('e/icons/%d.png i=%d  j=%d' %( k , i , j ) )   				   
			table.setItem(i,j,item)  

常使用的控件函数

1.弹窗函数QMessageBox

def showMsg():
     QMessageBox.information(widget, "信息提示框", "ok,弹出测试信息")

2.信号与槽相关函数
connect;该函数括号中直接加函数名称即可

btn = QPushButton( "测试点击按钮", widget) # 这种方式添加到QWidget中
btn.clicked.connect( showMsg)

disconnect

send.sendmsg.disconnect(slot.get)

self.close 内置的关闭窗口函数

获取相关控件元素的值

一般都要用到关键字text
获取下拉框文字

QComboBox.currentText()
QLineEdit.text()

设定控件的值

setText:适用于label,button,QTextEdit,QLineEdit

posted @ 2022-05-26 10:26  索匣  阅读(248)  评论(0编辑  收藏  举报