• 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 内置的关闭窗口函数

    
    
    
  • 相关阅读:
    .Net Remoting浅释
    初级SQL开发汇总指南
    WPF Navigation导航
    WPF Button的背景图片设置
    2015/9/20 Python基础(16):类和实例
    2015/9/19 Python基础(15):变量作用域及生成器
    2015/9/18 Python基础(14):函数式编程
    2015/9/17 Python基础(13):函数
    2015/9/15 Python基础(12):模块和包
    2015/9/10 Python基础(11):错误和异常
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/16312527.html
Copyright © 2020-2023  润新知