QSlider的使用,SetObjectName的使用
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QHBoxLayout, QLabel, QVBoxLayout
from PyQt5.QtGui import QColor
class MyClass(QWidget):
def __init__(self):
super(MyClass, self).__init__()
self.initUi()
self.show()
def initUi(self):
self.setWindowTitle('QSlider测试')
self.setGeometry((app.desktop().width() - self.width()) / 2, 250, 400, 300)
def slider():
def vance(n):
b = self.sender().objectName()
eval(f'color.set{b}({n})')
cn = color.name()
cc.setText(cn)
self.setStyleSheet('QWidget{background-color:%s}' % cn)
hl = QHBoxLayout()
color = QColor(0, 0, 0)
self.setStyleSheet('QWidget{background-color:#000}')
for i in ['Red', 'Green', 'Blue']:
# Qt.Horizontal=1,Qt.Vertical=2
sl = QSlider(2)
sl.setMinimum(0)
sl.setMaximum(255)
sl.setObjectName(i)
sl.valueChanged[int].connect(vance)
hl.addWidget(sl)
vl = QVBoxLayout(self)
vl.addLayout(hl)
cc = QLabel('RGB')
cc.setStyleSheet('color:#fff;font-weight:700;'
'font-family:Microsoft YaHei;')
vl.addWidget(cc)
slider()
if __name__ == '__main__':
# 新建一个app(进程)
app = QApplication(sys.argv)
# 初始化基类
myc = MyClass()
# 监控app的关闭键
sys.exit(app.exec_())
QProgressBar+QBasicTimer的使用。
一、QBasicTimer
- isActive() 方法:布尔值,返回时钟控件是否开启。开启返回True,否则为False。
- Start(时间,self) 方法:开启时钟,第1参数是:时间间隔(单位为毫秒)。
- Stop 方法:关闭时钟。
- timerId 方法:返回当前时钟控件的 ID,窗体中有多个时钟控件时使用。
- 对应的槽方法是QWidget内置的 timerEvent() 事件,我们使用时钟的时候一般都要重写这个方法。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QPushButton
from PyQt5.QtCore import QBasicTimer
class MyClass(QWidget):
def __init__(self):
super(MyClass, self).__init__()
self.initUi()
self.show()
def initUi(self):
self.setWindowTitle('QSlider测试')
self.setGeometry((app.desktop().width() - self.width()) / 2, 400, 400, 300)
def pgBar():
self.pv = 0
self.pgb = QProgressBar(self)
self.pgb.resize(300, 20)
self.pgb.setMinimum(0)
self.pgb.setMaximum(100)
self.pgb.setValue(self.pv)
self.timer1 = QBasicTimer()
self.btn = QPushButton('开始', self)
self.btn.move(0, 50)
def myTime():
if self.timer1.isActive():
self.timer1.stop()
self.btn.setText('开始')
else:
self.timer1.start(100, self)
self.btn.setText('暂停')
self.btn.clicked.connect(myTime)
pgBar()
def timerEvent(self, e):
if self.pv == 100:
self.timer1.stop()
self.btn.setText('完成')
else:
self.pv += 1
self.pgb.setValue(self.pv)
if __name__ == '__main__':
# 新建一个app(进程)
app = QApplication(sys.argv)
# 初始化基类
myc = MyClass()
# 监控app的关闭键
sys.exit(app.exec_())
记得重写方法的要写在类的方法下面,否则写函数里面会重写QWidget不成功。
QLabel + QPixmap载入图片
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QHBoxLayout, QVBoxLayout
from PyQt5.QtGui import QPixmap
class MyClass(QWidget):
def __init__(self):
super(MyClass, self).__init__()
self.initUi()
self.show()
def initUi(self):
self.setWindowTitle('QPixmap测试')
self.setGeometry((app.desktop().width() - self.width()) / 2, 400, 400, 300)
def pixMap():
def cPic():
if self.sender().text() == 'add Pic':
lbl.setPixmap(QPixmap('./More_threads_qt01/abc.jpg'))
else:
lbl.setPixmap(QPixmap(''))
lbl = QLabel('图片')
lbl.setStyleSheet('background-color:black')
lbl.setPixmap(QPixmap('./More_threads_qt01/asd5.jpg'))
# lbl.resize(300, 200)
lbl.setScaledContents(True)
hl = QHBoxLayout()
for i in ['add Pic', 'rem Pic']:
btn = QPushButton(i)
btn.clicked.connect(cPic)
hl.addWidget(btn)
vl = QVBoxLayout(self)
vl.addWidget(lbl)
vl.addLayout(hl)
pixMap()
if __name__ == '__main__':
# 新建一个app(进程)
app = QApplication(sys.argv)
# 初始化基类
myc = MyClass()
# 监控app的关闭键
sys.exit(app.exec_())
QComboBox的运用
- 下拉菜单,可以二级联动。
- 通过 addItem() 方法,向 combobox 中装入项目。
- 通过 clear() 方法,清空所有添加的项目。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QLabel, QPushButton, QHBoxLayout, QVBoxLayout
class MyClass(QWidget):
def __init__(self):
super(MyClass, self).__init__()
self.initUi()
self.show()
def initUi(self):
self.setWindowTitle('QPixmap测试')
self.setGeometry((app.desktop().width() - self.width()) / 2, 400, 400, 300)
def combox():
def actiVate(s):
self.sec_ld.clear()
k = obj.get(s, '')
if k != '':
self.sec_ld.addItems(k)
else:
self.sec_ld.addItem('请选择城市')
prov, city = QLabel('省'), QLabel('市')
obj = {'广东': ['广州', '汕头'], '浙江': ['杭州', '宁波'], '安徽': ['合肥', '铜陵']}
ls = [['请选择省份'] + list(obj.keys()), ['请选择城市']]
def co_box(ls):
cbx = QComboBox()
cbx.addItems(ls)
if len(ls) > 1:
cbx.setEditable(True)
cbx.editTextChanged[str].connect(actiVate)
# cbx.activated[str].connect(actiVate)
return cbx
hl = QHBoxLayout()
self.sec_ld = co_box(ls[1])
for i in [prov, co_box(ls[0]), city, self.sec_ld]:
hl.addWidget(i)
hl.addStretch()
vl = QVBoxLayout(self)
vl.addLayout(hl)
vl.addStretch()
combox()
if __name__ == '__main__':
# 新建一个app(进程)
app = QApplication(sys.argv)
# 初始化基类
myc = MyClass()
# 监控app的关闭键
sys.exit(app.exec_())
- cbx.editTextChanged[str].connect(actiVate):文本改变事件。(用户使用这个更方便,可以打字就自动触发事件。)
- cbx.activated[str].connect(actiVate):文本确认事件。
Calander日历
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QCalendarWidget, QVBoxLayout
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QDate
class MyClass(QWidget):
def __init__(self):
super(MyClass, self).__init__()
self.initUi()
self.show()
def initUi(self):
self.setWindowTitle('QSlider测试')
self.setGeometry((app.desktop().width() - self.width()) / 2, 250, 400, 300)
def cLand():
def myDate(d):
self.lbl.setText(d.toString('yyyy 年 M 月 d 日'))
cal = QCalendarWidget()
cal.clicked[QDate].connect(myDate)
self.lbl = QLabel('这里显示日期')
self.lbl.setFont(QFont('微软雅黑', 12))
vl = QVBoxLayout(self)
vl.addWidget(cal)
vl.addSpacing(5)
vl.addWidget(self.lbl)
vl.addSpacing(2)
cLand()
if __name__ == '__main__':
# 新建一个app(进程)
app = QApplication(sys.argv)
# 初始化基类
myc = MyClass()
# 监控app的关闭键
sys.exit(app.exec_())
使用QMainWindow的menuBar()方法创建工具栏
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QMessageBox
class MyClass(QMainWindow):
def __init__(self):
super(MyClass, self).__init__()
self.initUi()
self.show()
def initUi(self):
self.setWindowTitle('Qmenu测试')
self.setGeometry(app.desktop().width() / 2 - 302, 300, 300, 300)
def mEnu():
mb = self.menuBar()
f1 = mb.addMenu('文件')
self.n = 1
def new_win():
list1.append(MyClass_new(self.n))
self.n += 1
f1.addAction('New Window').triggered.connect(new_win)
# 记得QAction实例化的时候后面要加self,不然没法显示出来
f1.addMenu('最近文档').addActions([QAction(f'文档{i}', self) for i in range(3)])
for i in ['编辑', '视图']:
mb.addAction(i)
ac = QAction('帮助', self)
def hElp():
meb = QMessageBox(QMessageBox.Information,
'帮助',
'欢迎和我交流,QQ:619342297',
QMessageBox.Ok,
self)
meb.show()
ac.triggered.connect(hElp)
mb.addAction(ac)
mEnu()
class MyClass_new(QMainWindow):
def __init__(self, n):
super(MyClass_new, self).__init__()
self.initUi(n)
self.show()
def initUi(self, n):
self.setWindowTitle(f'Qmenu子窗口{n}')
self.setGeometry(app.desktop().width() / 2, 270 + n * 30, 250 + n * 10, 100)
if __name__ == '__main__':
# 新建一个app(进程)
app = QApplication(sys.argv)
# 初始化基类
myc = MyClass()
# 初始化全局数组来承载新窗体
list1 = []
# 监控app的关闭键
sys.exit(app.exec_())