PyQt5的笔记(中-3)

PyQt5的笔记的其他文章链接:

(3条消息) PyQt5的笔记(上)_我行我素,向往自由的博客-CSDN博客

(3条消息) PyQt5的笔记(中-1)_我行我素,向往自由的博客-CSDN博客

(3条消息) PyQt5的笔记(中-2)_我行我素,向往自由的博客-CSDN博客

目录

22.QComboBox 

22.1 数据操作

22.2 数据的获取

22.3 数据的限制

22.4 常规操作

22.5 信号的发射

22.6 综合案例

22.7 子类QFontComboBox的使用

23.QAbstractSlider

23.1  功能作用

23.2 信号 

23.3 QSlider

23.4 QScrollBar

23.5 QDial

24.QRubberBand橡皮筋选中

25.QDialog

25.1 功能测试 

25.2 信号

26.QFontDialog

26.1 功能作用

27.QColorDialog

27.1 功能特性

27.2 信号

28.QFileDialog

28.1 静态方法-弹出文件操作对话框 

28.2 静态方法-弹出文件夹操作对话框

28.3 构造函数

28.4 功能特性

28.5 信号

29.QInputDialog

29.1 静态方法 

29.2 功能作用

29.3 信号

30.QCalenderWidget

30.1 功能特性

30.1.1 设置日期范围 

30.1.2 日期编辑 

30.1.3 日期获取 

30.1.4 格式外观

30.1.5 选中模式

30.1.6 常用方法

30.2 信号


22.QComboBox 

组合控件,多个小控件组合而成。 

22.1 数据操作

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QComboBox功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        self.cb=QComboBox(self)
        self.cb.resize(300,30)
        # #添加一个条目
        # # self.cb.addItem('xxx1')
        # # self.cb.addItem(QIcon('图片/校徽.png'),'xxx2')
        # #添加多个条目
        # self.cb.addItems(['1','2','3'])#参数是可迭代对象,其他数据类型也可以,但字符串不可以
        # #插入条目
        # self.cb.insertItem(1,QIcon('图片/赞同.png'),'棒')#第一个参数是指位置
        # self.cb.insertItems(1,('a','b','c'))#一次插入好几个条目
        # #设置条目项【条目图标,条目名字内容】
        # self.cb.setItemIcon(2,QIcon('图片/点击.png'))#第一个参数代表位置 0 1 2
        # self.cb.setItemText(2,'点击')
        # #删除条目
        # self.cb.removeItem(3)
        #展示一个树形结构【了解,以后会学】
        model=QStandardItemModel()
        item1=QStandardItem('item1')
        item2 = QStandardItem('item2')
        item22 = QStandardItem('item22')
        item2.appendRow(item22)#添加行
        model.appendRow(item1)
        model.appendRow(item2)
        self.cb.setModel(model)#这里只支持展示一级视图
        self.cb.setView(QTreeView(self.cb))#这里会按照树形结构展示


if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

效果展示:

22.2 数据的获取

self.cb=QComboBox(self)
self.cb.resize(300,30)

test_btn=QPushButton('测试按钮',self)
test_btn.move(100,100)
#test_btn.clicked.connect(lambda:print('当前共有{}个条目'.format(self.cb.count())))
test_btn.clicked.connect(lambda: print('当前的索引:{}'.format(self.cb.currentIndex())))
test_btn.clicked.connect(lambda: print('当前的条目:{}'.format(self.cb.currentText())))#currentText返回的是条目名字
test_btn.clicked.connect(lambda: print('当前的数据:{}'.format(self.cb.currentData())))#currentData返回条目下的内容
test_btn.clicked.connect(lambda: test_btn.setIcon(self.cb.itemIcon(self.cb.currentIndex())))#获取当前条目的图标
self.cb.addItem(QIcon('图片/校徽.png'),'校徽',{'name':'张三'})
self.cb.addItems(['abc','123','456'])

运行效果: 

22.3 数据的限制

#数据限制
self.cb.setMaxCount(5)#设置最大条目,超过就无法添加,而不是新的替换老的
self.cb.setMaxVisibleItems(3)#设置可见的条目数目,多余的...显示

22.4 常规操作

#常规操作
self.cb.setIconSize(QSize(60,60))
self.cb.setSizeAdjustPolicy(QComboBox.AdjustToContents)#组合框将始终根据内容进行调整
#test_btn.pressed.connect(lambda :self.cb.clear())#清空
#test_btn.clicked.connect(lambda :self.cb.showPopup())#弹出
self.cb.setCompleter(QCompleter(['123','abc','aaa','bbb']))#完成器

22.5 信号的发射

#信号的发射
self.cb.activated.connect(lambda val:print('第{}个条目被激活'.format(val)))#【注意】只有用户改变条目才会被激活,代码改变的不会
self.cb.activated[str].connect(lambda val: print('条目被激活,内容是:',val))#获取到的是条目的名字
self.cb.currentIndexChanged.connect(lambda val:print('当前索引发生改变:',val))
self.cb.currentTextChanged.connect(lambda val:print('当前文本发生改变:',val))
self.cb.editTextChanged.connect(lambda val:print('当前编辑文本发生改变:',val))
self.cb.highlighted[str].connect(lambda val:print('当前高亮发生改变:',val))

22.6 综合案例

运行效果:

from PyQt5.Qt import *
import sys


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QComboBox案例')
        self.resize(500, 500)
        self.city_dic = {
            '北京': {
                '东城': '001',
                '西城': '002',
                '朝阳': '003',
                '丰台': '004'
            },
            '上海': {
                '黄埔': '005',
                '徐汇': '006',
                '长宁': '007',
                '静安': '008',
                '松江': '009'
            },
            '广东': {
                '广州': '010',
                '深圳': '011',
                '湛江': '012',
                '佛山': '013'
            }
        }
        self.setup_ui()

    def setup_ui(self):
        #1.创建两个下拉列表控件 pro city
        self.pro = QComboBox(self)
        self.city = QComboBox(self)
        self.pro.move(100, 100)
        self.city.move(200, 100)

        #3.监听省下拉列表当前索引发生改变的信号
        self.pro.currentIndexChanged[str].connect(self.pro_changed)
        #self.pro.setCurrentIndex(0)#这个并不会触发信号

        #4.监听城市下拉列表当前索引发生改变的信号
        self.city.currentIndexChanged[int].connect(self.city_changed)#拿到的是索引

        #2.展示数据到第一个下拉选择控件当中
        self.pro.addItems(self.city_dic.keys())

    def pro_changed(self, pro_name):
        #1.根据省的名字,到字典里,获取对应的城市字典
        citys=self.city_dic[pro_name]
        self.city.blockSignals(True)#阻塞信号,防止clear()触发
        self.city.clear()#清空之前的条目,这里也会触发city_changed()
        self.city.blockSignals(False)
        for key,val in citys.items():
            self.city.addItem(key,val)

    def city_changed(self,item_idx):
        print(self.city.itemData(item_idx))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

22.7 子类QFontComboBox的使用

QComboBox的子类:QFontComboBox,字体家族,选择字体。 

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QFontComboBox功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        label = QLabel(self)
        label.setText('label')
        label.move(100,100)
        fcb=QFontComboBox(self)
        #fcb.currentFontChanged.connect(lambda font:print('字体发生改变:',font))
        fcb.currentFontChanged.connect(lambda font:label.setFont(font))

if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果:

23.QAbstractSlider

print('QAbstractSlider的子类有:',QAbstractSlider.__subclasses__())
#QDial,QScrollBar,QSlider
        

23.1  功能作用

 

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QAbstractSlider功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        #print('QAbstractSlider的子类有:',QAbstractSlider.__subclasses__())#QDial,QScrollBar,QSlider
        #QAbstractSlider(self)
        label=QLabel(self)
        label.setText('0')
        label.move(200,200)
        #label.adjustSize()#动态调整控件大小
        label.resize(100,30)
        sd=QSlider(self)
        sd.move(100,100)
        sd.valueChanged.connect(lambda val:label.setText(str(val)))

        #设置最大值最小值
        sd.setMaximum(100)
        sd.setMinimum(60)

        #当前数值的设置和获取
        sd.setValue(88)
        print('当前的数值为:',sd.value())

        #步长的设置
        sd.setSingleStep(5)#这里的步长不是指鼠标拖动时的,而是指按下上下键的时候

        #是否追踪
        print('是否有追踪:',sd.hasTracking())#默认是True,即滑块拖动一下就会出发一下,而不是稳定的时候
        sd.setTracking(False)#不追踪:只要鼠标不松开,就不触发

        #倒立外观:大小头反过来,下面是大值,上面是小值
        sd.setInvertedAppearance(True)

        #操作反转:上下键位反过来
        sd.setInvertedControls(False)#设置为False,则按键盘上上下键效果相反,即上键实际上滑块下跑

        # 设置水平方向
        sd.setOrientation(Qt.Horizontal)


if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果: 

23.2 信号 

#信号
sd.sliderMoved.connect(lambda val:print('值改为:',val))
sd.actionTriggered.connect(lambda val:print('打印的是状态:',val))

23.3 QSlider

sd=QSlider(self)
sd.move(200,200)
sd.resize(30,200)
#设置刻度:每隔十个值画一个刻度线
sd.setTickPosition(QSlider.TicksRight)#右边
sd.setTickPosition(QSlider.TicksBothSides)#两边都有
sd.setTickInterval(5)#每隔5个绘制一个刻度线
#sd.setPageStep(5)#设置步长

案例拓展:

from PyQt5.Qt import *
import sys

class SLider(QSlider):
    def __init__(self,parent=None,*args,**kwargs):
        super().__init__(parent,*args,**kwargs)
        self.setTickPosition(QSlider.TicksBothSides)
        self.set_up()

    def set_up(self):
        self.label=QLabel(self)
        self.label.setStyleSheet('color:red;')

    def mousePressEvent(self,evt):
        super().mousePressEvent(evt)
        x=(self.width()-self.label.width())/2
        y=(1-self.value()/(self.maximum()-self.minimum()))*self.height()-self.label.height()
        self.label.show()
        self.label.move(int(x),int(y))

    def mouseMoveEvent(self,evt):
        super().mouseMoveEvent(evt)
        x = (self.width() - self.label.width()) / 2
        y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height())
        self.label.move(int(x),int(y))
        self.label.setText(str(self.value()))
        self.label.adjustSize()

    def mouseReleaseEvent(self, evt):
        super().mouseReleaseEvent(evt)
        self.label.hide()

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QSlider案例')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        #案例
        self.slider=SLider(self)
        self.slider.move(200,200)
        self.slider.resize(30,200)
        self.label=QLabel(self.slider)


if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果:

23.4 QScrollBar

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QScrollBar功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        sb=QScrollBar(self)#竖直滚动条
        sb.move(100,100)
        sb.resize(30,200)

        sb2 = QScrollBar(Qt.Horizontal,self)  # 水平滚动条
        sb2.move(150, 100)
        sb2.resize(200, 30)

        sb.valueChanged.connect(lambda val:print(val))
        sb.setPageStep(50)

if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

效果展示:

23.5 QDial

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QDial功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        dia=QDial(self)
        dia.setRange(0,360)#设置范围,默认循环
        dia.setNotchesVisible(True)#刻度可看见
        dia.setPageStep(5)
        dia.setWrapping(True)#无缺口,36.°无死角转动
        dia.setNotchTarget(90)#凹口之间的目标像素值,即大刻度的密度值
        #dia.valueChanged.connect(lambda val:print('值发生改变:',val))

        label=QLabel(self)
        label.move(200,100)
        label.setText('label')
        def test(val):
            label.setStyleSheet('font-size:{}px;'.format(val))
            label.adjustSize()
        dia.valueChanged.connect(lambda val:test(val))

if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

效果展示:

24.QRubberBand橡皮筋选中

rb=QRubberBand(QRubberBand.Rectangle,self)#矩形形状
rb.setGeometry(10,10,60,60)
print('当前是否被显示出来:',rb.isVisible())#False,默认状态下是隐藏的
rb.show()

案例:

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QRubberBand案例')
        self.resize(500,500)
        self.setup_ui()

    def setup_ui(self):
        #0.添加子控件  复选框
        for i in range(30):
            cb=QCheckBox(self)
            cb.setText(str(i))
            cb.move(i%4*50,i//4*60)
        # 1.创建一个橡皮筋选中控件
        self.rb = QRubberBand(QRubberBand.Rectangle, self)

    def mousePressEvent(self,evt):
        #2.设置尺寸大小:鼠标点击的位置点,
        self.origin_pos=evt.pos()
        self.rb.setGeometry(QRect(self.origin_pos,QSize()))
        #3.展示橡皮筋控件
        self.rb.show()

    def mouseMoveEvent(self,evt):
        #调整橡皮筋选中控件的位置以及尺寸
        self.rb.setGeometry(QRect(self.origin_pos,evt.pos()).normalized())#normalized的设置,支持了右下角往左上角拖

    def mouseReleaseEvent(self,evt):
        #1.获取橡皮筋空间的尺寸范围
        rect=self.rb.geometry()
        #2.遍历所有的子控件,查看哪些自控件在区域范围
        for child in self.children():
            if rect.contains(child.geometry()) and child.inherits("QCheckBox"):
                child.toggle()
        self.rb.hide()

if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

效果展示:

25.QDialog

25.1 功能测试 

from PyQt5.Qt import *
import sys

app=QApplication(sys.argv)
window=QWidget()
window.setWindowTitle('QDialog功能测试')
window.resize(500,500)
d=QDialog(window)
btn1=QPushButton(d)
btn1.setText('btn1')
btn1.move(20,20)
btn1.clicked.connect(lambda :d.accept())#

btn2=QPushButton(d)
btn2.setText('btn2')
btn2.move(60,60)
# btn2.clicked.connect(lambda :d.reject())#
btn2.clicked.connect(lambda:print(d.accept()))

btn3=QPushButton(d)
btn3.setText('btn3')
btn3.move(60,160)
# btn3.clicked.connect(lambda :d.done(8))#
btn3.clicked.connect(lambda :d.setRresult(888))#设置和获取数值

d.setWindowTitle('对话框')
d.setWindowModality(Qt.WindowModal)
#是否显示尺寸调整控件
d.setSizeGripEnabled(True)
d.show()
# d.exec()#模态对话框


window.show()
sys.exit(app.exec_())

25.2 信号

from PyQt5.Qt import *
import sys

app=QApplication(sys.argv)
window=QWidget()
window.setWindowTitle('QDialog功能测试')
window.resize(500,500)
d=QDialog(window)
btn1=QPushButton(d)
btn1.setText('btn1')
btn1.move(20,20)
btn1.clicked.connect(lambda :d.accept())#

btn2=QPushButton(d)
btn2.setText('btn2')
btn2.move(60,60)
btn2.clicked.connect(lambda :d.reject())#
# btn2.clicked.connect(lambda:print(d.accept()))

btn3=QPushButton(d)
btn3.setText('btn3')
btn3.move(60,160)
btn3.clicked.connect(lambda :d.done(8))#
# btn3.clicked.connect(lambda :d.setRresult(888))#设置和获取数值

d.accepted.connect(lambda:print('点击了接受按钮'))
d.rejected.connect(lambda :print('点击了拒绝按钮'))
d.finished.connect(lambda val:print('点击了完成按钮:',val))

d.setWindowTitle('对话框')
d.setWindowModality(Qt.WindowModal)
#是否显示尺寸调整控件
d.setSizeGripEnabled(True)
d.show()
# d.exec()#模态对话框


window.show()
sys.exit(app.exec_())

26.QFontDialog

 继承于QDialog。

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QFontDialog功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        # fd = QFontDialog(self)
        font=QFont()
        font.setFamily('宋体')
        font.setPointSize(36)
        fd=QFontDialog(font,self)#font就是默认的

        btn=QPushButton(self)
        btn.setText('测试按钮')
        btn.move(100,100)
        btn.clicked.connect(lambda:fd.open())#窗口级别的模态对话框

        fd.exec()

if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果:

26.1 功能作用

fd.show()#非模态对话框
fd.open()#模态中的窗口级别
fd.exec()#模态中的应用程序级别
'''
非模态:就是窗口之间互不干扰
模态:必须关闭当前对话框,才允许操作其他对话框
窗口级别:所有窗口都展示出来
应用程序级别:只有一个对话框展示出来
'''

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QFontDialog功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        # fd = QFontDialog(self)
        font=QFont()
        font.setFamily('宋体')
        font.setPointSize(36)
        # fd=QFontDialog(font,self)#font就是默认的
        # 设置当前字体
        fd = QFontDialog(self)
        fd.setCurrentFont(font)
        #选项控制
        # fd.setOption(QFontDialog.NoButtons)#只设置一个
        fd.setOptions(QFontDialog.MonospacedFonts | QFontDialog.NoButtons)#同时设置多个
        print(fd.testOption(QFontDialog.NoButtons))#查看某一个选项是否生效


        btn=QPushButton(self)
        btn.setText('测试按钮')
        btn.move(100,100)

        label=QLabel(self)
        label.move(200,100)
        label.setText("label")
        def font_sel():
            # result=QFontDialog.getFont(self)
            result=QFontDialog.getFont(font,self,'选择一个好看的字体')
            #print(result)#字体 bool类型,返回的这个bool类型,表示是否点击了OK键
            if result[1]==True:
                label.setFont(result[0])
                label.adjustSize()
        btn.clicked.connect(font_sel)
        def cfc(font):
            label.setFont(font)
            label.adjustSize()
        fd.currentFontChanged.connect(cfc)#实时改变

        # def font_sel():
        #     print('字体已经被选择:',fd.selectedFont().family())
        # # btn.clicked.connect(lambda:fd.open(font_sel))#窗口级别的模态对话框
        #
        # # print(fd.exec())#可以拿到用户点了哪个选项,【取消】或者×为0,【ok】是1
        # if fd.exec()==1:
        #     print(fd.selectedFont().family())
        # fd.show()

if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

27.QColorDialog

QColorDialog和QFontDialog差不多。 

27.1 功能特性

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QColorDialog功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        #设置控件的背景颜色
        # self.setStyleSheet('background-color:red')#自己以及子控件均会被设置
        # self.setStyleSheet('background-color:rgb(100,200,150);')


        # cd=QColorDialog(self)
        cd = QColorDialog(QColor(100,200,150),self)#设置默认颜色
        cd.setWindowTitle('选择一个好看的颜色')

        # def color(col):
        #     # 调色板
        #     palette = QPalette()
        #     palette.setColor(QPalette.Background, col)  # WindowText文本颜色;Background背景颜色
        #     self.setPalette(palette)
        # cd.colorSelected.connect(color)#只有用户点击【OK】才会向外界传递信息
        # cd.show()#非模态对话框,无返回值

        def color():
            palette = QPalette()
            palette.setColor(QPalette.Background, cd.selectedColor())
            self.setPalette(palette)
        # cd.open(color)#模态中的窗口级别,无返回值

        if cd.exec():# cd.exec()#模态中的应用程序级别,有int类型的返回值,1表示点击了【OK】,0表示点击其他
            color()
            
if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果:

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QColorDialog功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        cd = QColorDialog(QColor(100,200,150),self)#设置默认颜色
        cd.setWindowTitle('选择一个好看的颜色')

        def color():
            # 调色板
            palette = QPalette()
            palette.setColor(QPalette.Background, cd.currentColor())  # WindowText文本颜色;Background背景颜色
            self.setPalette(palette)
        cd.currentColorChanged.connect(color)
        cd.setOptions(QColorDialog.NoButtons | QColorDialog.ShowAlphaChannel)#NoButtons:没有了【OK】【取消】按钮了,应用于实时检测场景;ShowAlphaChannel:透明度
        cd.show()#非模态对话框,无返回值


if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果:

#设置
QColorDialog.setCustomColor(0, QColor(100, 200, 50))#第一个参数表示位置,从上往下数,从左往右数
QColorDialog.setStandardColor(2,QColor(255,0,0))
btn=QPushButton()
btn.setText('测试按钮')
btn.move(100,100)
def test():
    color=QColorDialog.getColor(QColor(10,20,100),self,'选择颜色')
    #调色板
    palette = QPalette()
    palette.setColor(QPalette.Background,color)  # WindowText文本颜色;Background背景颜色
    btn.setPalette(palette)
    # self.setPalette(palette)
btn.clicked.connect(test)

27.2 信号

28.QFileDialog

 

28.1 静态方法-弹出文件操作对话框 

获取文件是指获取该文件的路径。 

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QFileDialog功能测试')
        self.resize(500,500)
        self.setup_ui()
        
    def setup_ui(self):
        #选择一个文件打开 getOpenFileName
        # #                                  父类     对话框名字  打开的路径路径     指定将要打开的文件类型以;;分割                    默认指定类型
        # result=QFileDialog.getOpenFileName(self,'选择一个.py文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)','Python文件(*.py)')

        #同时选多个文件  getOpenFileNames
        # result=QFileDialog.getOpenFileNames(self,'选择一个.py文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)','Python文件(*.py)')

        result=QFileDialog.getSaveFileName(self,'选择一个.py文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)','Python文件(*.py)')

        print(result)#是一个元组,(文件的完整路径,选择的文件类型过滤字符串)

if __name__=='__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果: 

28.2 静态方法-弹出文件夹操作对话框

#选择文件夹
# result=QFileDialog.getExistingDirectory(self,'选择一个py文件','./')

result=QFileDialog.getExistingDirectoryUrl(self,'选择一个py文件',QUrl('./'))

运行效果:

28.3 构造函数

btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(100,100)
def test():
    fd=QFileDialog(self,'选择一个文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)')
    fd.fileSelected.connect(lambda file:print(file))#可以拿到文件路径
    fd.open()
btn.clicked.connect(test)

运行效果:

28.4 功能特性

#接收模式
fd.setAcceptMode(QFileDialog.AcceptSave)#选择的时候必须要有文件后缀名
#设置默认后缀名
fd.setDefaultSuffix('txt')
#设置文件模式
fd.setFileMode(QFileDialog.Directory)#设置为选择文件夹,而不再是All(*.*)...
#设置名称过滤器
# fd.setNameFilter('IMG(*.jpg *.png *.jpeg)')#注意:格式之间用空格隔开
fd.setNameFilters(['All(8.8)','Images(*.png *.jpg)','Python文件(*.py)'])

#显示信息的详细程度
fd.setViewMode(QFileDialog.Detail)
#设置指定角色的标签名称
fd.setLabelText(QFileDialog.FileName,'zmj的文件')
fd.setLabelText(QFileDialog.Accept,'zmj的打开')
fd.setLabelText(QFileDialog.Reject,'zmj的取消')

效果展示:

28.5 信号

#信号
fd.currentChanged.connect(lambda path:print('当前路径字符串发生改变。',path))
fd.currentUrlChanged.connect(lambda url:print('当前路径QUrl发生改变时:',url))
fd.directoryEntered.connect(lambda path:print('当前目录字符串进入时:',path))
fd.directoryUrlEntered.connect(lambda url:print('当前目录QUrl进入时:',url))
fd.filterSelected.connect(lambda filter:print('当前名称过滤字符串被选中时:',filter))
fd.setFileMode(QFileDialog.ExistingFiles)#允许同时选择多个文件  ctrl
fd.fileSelected.connect(lambda val:print('单个文件被选中',val))
fd.filesSelected.connect(lambda val:print('多个文件被选中-列表[字符串]',val))
fd.urlSelected.connect(lambda val:print('单个文件被选中-url:',val))
fd.urlsSelected.connect(lambda val:print('多个文件被选中-列表[url]',val))

29.QInputDialog

29.1 静态方法 

getInt()

getDouble()

getText()

getMultiLineText()
getItem()

#'xxx1'是对话框的主标题,'xxx2'是输入框的提示标题
result=QInputDialog.getInt(self,'xxx1','xxx2',666,step=5)#默认值是666,步长为5,返回一个元组(数值,bool),点击【OK】返回True
result=QInputDialog.getDouble(self,'大标题','小标题',66.66,decimals=2)#decimals表示小数位数
result=QInputDialog.getText(self,'大标题','小标题',echo=QLineEdit.Password)#单行文本编辑器,没有上下箭头,echo是输出模式
result=QInputDialog.getMultiLineText(self,'大标题','小标题','zzz')#多行文本编辑器,默认字符串是:'zzz'
result=QInputDialog.getItem(self,'大标题','小标题',['1','2','3'],2,True)#默认是第二个条目,True表示可编辑
print(result)

29.2 功能作用

 

 

input_d=QInputDialog(self,Qt.FramelessWindowHint)

#选项设置
input_d.setOption(QInputDialog.UseListViewForComboBoxItems)
# input_d.setComboBoxItems(['1','2','abc'])#设置下拉列表

#设置界面文本控件内容
input_d.setLabelText('请输入你的姓名')
input_d.setOkButtonText('好的')
input_d.setCancelButtonText('我想取消')

#输入模式的设置
input_d.setInputMode(QInputDialog.DoubleInput)
input_d.setDoubleRange(9.9,19.9)
input_d.setDoubleStep(2)
input_d.setDoubleDecimals(3)#设置3位小数

input_d.show()

29.3 信号

30.QCalenderWidget

QCalenderWidget继承于QWidget,意味着不可以弹出来。 

提供了一个基于每月日历控件,允许用户选择一个日期。

30.1 功能特性

30.1.1 设置日期范围 

cw=QCalendarWidget(self)

#设置日期范围
cw.setMinimumDate(QDate(1990,1,1))
cw.setMaximumDate(QDate(2025,12,12))
# cw.setDateRange(QDate(1990,1,1),QDate(2025,12,12))

30.1.2 日期编辑 

#通过键盘输入日期
cw.setDateEditEnabled(True)#默认是True
cw.setDateEditAcceptDelay(3000)#等待3秒会变成选中效果

30.1.3 日期获取 

# 日期获取
btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(300,300)
btn.clicked.connect(lambda:print('月份:',cw.monthShown()))
btn.clicked.connect(lambda: print('年份:', cw.yearShown()))
btn.clicked.connect(lambda: print('选中日期:', cw.selectedDate()))

效果展示:

30.1.4 格式外观

#外观格式的设置
cw.setNavigationBarVisible(True)#False:导航条的消失,不影响通过键盘设置日期
cw.setFirstDayOfWeek(Qt.Sunday)#设置周日为第一天
cw.setGridVisible(True)#设置网格的显示

tcf=QTextCharFormat()
tcf.setFontFamily('楷书')
tcf.setFontPointSize(16)
tcf.setFontUnderline(True)
cw.setHeaderTextFormat(tcf)
cw.setHorizontalHeaderFormat(QCalendarWidget.NoHorizontalHeader)
cw.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)

t_tcf=QTextCharFormat()
t_tcf.setFontPointSize(20)
t_tcf.setToolTip('这是星期二')#小提示
cw.setDateTextFormat(QDate(2018,12,12),t_tcf)

30.1.5 选中模式

不支持多选。

#选中模式
cw.setSelectionMode(QCalendarWidget.NoSelection)
cw.setSelectedDate(QDate(2022,7,19))

30.1.6 常用方法

#显示方法
btn.clicked.connect(cw.showToday)#展示当前这一天,只是展示,而不选中
btn.clicked.connect(cw.showNextYear)#展示下一年

30.2 信号

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5是一个流行的Python GUI库,可以用于开发图形界面应用程序。关于笔记本电量的问题,PyQt5可以通过调用相关的系统API来获取电池的状态和电池电量信息。 在PyQt5,可以使用QSystemTrayIcon类来创建系统托盘图标,并通过调用QSystemTrayIcon的相关方法实现获取电池信息并显示在托盘图标上。 首先,我们需要导入PyQt5和相关的模块: ```python from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMenu, QAction from PyQt5.QtGui import QIcon from PyQt5.QtCore import Qt, QTimer ``` 然后,我们创建一个QApplication实例和一个QSystemTrayIcon实例: ```python app = QApplication([]) tray_icon = QSystemTrayIcon(QIcon('battery_icon.png'), app) ``` 接下来,我们定义一个函数来获取电池电量信息,并将其显示在托盘图标上: ```python def update_battery_info(): battery_info = app.primaryScreen().virtualSiblings()[0].backendObject().batteryInfo() battery_percentage = battery_info.percent() battery_status = battery_info.state() tray_icon.setToolTip(f'Battery: {battery_percentage}%, Status: {battery_status}') ``` 然后,我们创建一个定时器来定期更新电池电量信息: ```python timer = QTimer() timer.timeout.connect(update_battery_info) timer.start(10000) # 10秒更新一次 ``` 最后,我们在托盘图标上创建一个菜单,并将应用程序与托盘图标关联起来: ```python menu = QMenu() exit_action = QAction('Exit', app) exit_action.triggered.connect(app.quit) menu.addAction(exit_action) tray_icon.setContextMenu(menu) tray_icon.show() app.exec_() ``` 以上代码的battery_icon.png是一个自定义的电池图标文件,可以根据自己的需求替换。 这样,当我们运行这段代码时,就会在系统托盘显示一个电池图标,并且会定时更新电池电量信息。当我们单击右键时,会打开一个菜单,可以选择退出应用程序。 希望这个回答对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值