目录
结果:
这次学习了一些新的控件,下次估计就要开始学习PyQt5的高级控件了。
这次学习的控件有:
ComboBox:下拉组合框
FontComoBox:字体组合框
ListWidget:列表
GroupBox:分组框
TabWidget:选项卡
日期和时间控件:DateTimeEdit、DateEdit、TimeEdit
CalendarWidget:日历控件
当然对于控件而言,只是摆在那里,是实现不了什么功能的。
要利用控件实现一定的功能,需要知道该控件会发射什么信号,并且让该信号绑定一个方法。
而我们只需要把想执行的逻辑操作和想法,写在方法里即可。
以上控件的发射的一些常用信号:
ComboBox控件会发射currentIndexChanged(在下拉索引发生改变时发射)
FontComboBox控件和ComboBox相似。TabWidget控件会发射currentChanged信号(在切换选项卡时,发射)
日期和时间控件会发射三种信号:timeChanged、dateChanged、datetTimeChanged
在时间改变时发射timeChanged信号
在日期改变时发射dateChanged信号
在时间或者日期改变时发射dateTimeChanged信号CalendarWidget控件会发射selectionChanged信号
当选中日期发生变化时发射selectionChanged信号
本次学习实现了
1.下路组合框选中的文字用label文本实时显示,
2.字体组合框选中的字体可以改变label文本的字体,
3.使用分组框使单选按钮可以分组选择。
4.选项卡的实时添加与删除(用按钮实现),
5.日期和时间控件显示本地时间(但不会变化,不是实时的),
6.日历控件选中一个日期,会在控制台输出日期。
控制台就是print输出的地方.
上代码:
label_2.py:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'label_2.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
# 下拉组合框(ComboBox)
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(10, 10, 80, 30))
self.comboBox.setObjectName("comboBox")
mid = '无'
list = ['篮球', '足球', '乒乓球', '羽毛球']
self.comboBox.addItem(mid) # 给组合框中添加选项--添加单个变量
self.comboBox.addItems(list) # 给组合框中添加选项--添加列表中所有变量
self.comboBox.currentIndexChanged.connect(self.showinfo_comboBox) # 改变索引,发射信号,执行方法内的程序
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 40, 210, 30))
self.label.setObjectName("label")
self.label.setText("你最喜欢的运动是:" + self.comboBox.currentText())
# 字体组合框(FontComboBox)--主要用于改变文本的字体
self.fontComboBox = QtWidgets.QFontComboBox(self.centralwidget)
self.fontComboBox.setGeometry(QtCore.QRect(10, 70, 100, 30))
self.fontComboBox.setObjectName("fontComboBox")
self.fontComboBox.setFontFilters(QtWidgets.QFontComboBox.AllFonts) # 在组合框中显示所有字体
self.fontComboBox.currentIndexChanged.connect(self.showinfo_comboBox)
# 列表(ListWidget)
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.listWidget.setGeometry(QtCore.QRect(200, 0, 300, 200))
self.listWidget.setObjectName("listWidget")
self.listWidget.setViewMode(QtWidgets.QListView.ListMode) # 设置以列表形式显示数据
self.listWidget.setWordWrap(True) # 设置开启自动换行
self.listWidget.addItems(list)
dict = {'1':'篮球','2':'足球','3':'羽毛球','4':'乒乓球','5':'橄榄球'} # 向列表中添加字典中的键值对
from collections import OrderedDict # 字典默认是无序的,我们可以导入这个模块
dict = OrderedDict(dict) # 使字典变为有序字典
for key, value in dict.items():
self.item = QtWidgets.QListWidgetItem(self.listWidget) # 在列表中单独创建列表项,
self.item.setText(key+':'+value) # 从而可以一个一个的添加值
self.item.setToolTip(value) # 一个一个的设置提示
# 分组框(GroupBox)-- 子窗口控件
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(0, 100, 200, 100))
self.groupBox.setObjectName("groupBox")
self.groupBox.setTitle('分组1')
self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox_2.setGeometry(QtCore.QRect(0, 200, 200, 100))
self.groupBox_2.setObjectName("groupBox_2")
self.groupBox_2.setTitle('分组2')
# 单选按钮(RadioButton)--同一组的单选按钮只能选择一个
self.radioButton = QtWidgets.QRadioButton(self.groupBox) # 如果要把控件放到分组框中,
self.radioButton.setGeometry(QtCore.QRect(0, 0, 80, 50)) # 直接把父窗口设置为分组框即可。
self.radioButton.setObjectName("radioButton")
self.radioButton.setText("选择A")
self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox)
self.radioButton_2.setGeometry(QtCore.QRect(80, 0, 80, 50))
self.radioButton_2.setObjectName("radioButton_2")
self.radioButton_2.setText("选择B")
self.radioButton_3 = QtWidgets.QRadioButton(self.groupBox_2)
self.radioButton_3.setGeometry(QtCore.QRect(0, 0, 80, 50))
self.radioButton_3.setObjectName("radioButton_3")
self.radioButton_3.setText("选择C")
self.radioButton_4 = QtWidgets.QRadioButton(self.groupBox_2)
self.radioButton_4.setGeometry(QtCore.QRect(80, 0, 80, 50))
self.radioButton_4.setObjectName("radioButton_4")
self.radioButton_4.setText("选择D")
# 选项卡(TabWidget)
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(0,400,400,150))
self.tabWidget.setTabsClosable(True)
# 设置按钮用于添加选项窗口
self.pushBotton = QtWidgets.QPushButton(self.centralwidget)
self.pushBotton.setGeometry(QtCore.QRect(400, 400, 60, 30))
self.pushBotton.setObjectName("pushBotton")
self.pushBotton.setText('添加')
self.pushBotton.clicked.connect(self.addtab)
# 设置按钮用于删除一个窗口
self.pushBotton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushBotton_2.setGeometry(QtCore.QRect(400, 460, 60, 30))
self.pushBotton_2.setObjectName("pushBotton_2")
self.pushBotton_2.setText('删除')
self.pushBotton_2.clicked.connect(self.deltab)
# 日期和时间控件(DataTimeEdit)
self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.centralwidget)
self.dateTimeEdit.setGeometry(QtCore.QRect(500, 200, 200, 30))
self.dateTimeEdit.setObjectName("dateTimeEdit")
self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss") # 设置显示形式
self.dateTimeEdit.setCalendarPopup(True) # 设置可以弹出日历
# self.dateTimeEdit.setTime(QtCore.QTime(1,59)) # 设置时间为1:59
self.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime()) # 设置显示获取当前日期时间
print(self.dateTimeEdit.text()) # 字符串类型
print(type(self.dateTimeEdit.text()))
print(self.dateTimeEdit.dateTime()) # QDateTime类型
# 日历控件(CalendarWidget)
self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
self.calendarWidget.setGeometry(QtCore.QRect(480, 250, 310, 350))
self.calendarWidget.setObjectName("calendarWidget")
self.calendarWidget.setFirstDayOfWeek(QtCore.Qt.Monday) # 设置每周的第一天为星期一
self.calendarWidget.setGridVisible(True) # 设置网格线可见
self.calendarWidget.setSelectionMode(QtWidgets.QCalendarWidget.SingleSelection) # 设置可以选中一个日期
self.calendarWidget.setDateEditEnabled(True) # 设置日期可以编辑
self.calendarWidget.selectionChanged.connect(self.getdate) # 当选中日期改变时,发射selectionChange信号
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def showinfo_comboBox(self):
# 改变字体--字体组合框
print(self.fontComboBox.currentText())
self.label.setFont(QtGui.QFont(self.fontComboBox.currentText()))
# 显示文字--下拉组合框中的文字
self.label.setText("你最喜欢的运动是:"+self.comboBox.currentText())
def addtab(self): # 添加选项卡
self.atab = QtWidgets.QWidget() # 创建选项卡对象
name = 'tab_'+str(self.tabWidget.count())
self.atab.setObjectName(name) # 设置其对象名
self.tabWidget.addTab(self.atab, name)
def deltab(self): # 删除选项卡
self.tabWidget.removeTab(self.tabWidget.currentIndex()) # 移除当前选项卡
# self.tabWidget.currentIndex() ------ 得到当前选项卡的索引--从0开始逐渐加一
def getdate(self):
date = QtCore.QDate(self.calendarWidget.selectedDate()) # 获取当前选中日期的QDate对象
# 获取Qdate对象的年、月、日。
year = date.year()
month = date.month()
day = date.day()
print('日期', end=':')
print(year, month, day, sep='-')
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
label_2_two.py
from label_2 import Ui_MainWindow
from PyQt5 import QtWidgets
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
结果
运行程序:
1.下路组合框选中的文字用label文本实时显示
2.字体组合框选中的字体可以改变label文本的字体
3.使用分组框使单选按钮可以分组选择
4.选项卡的实时添加与删除(用按钮实现)
点击‘’添加‘’按钮
点击“删除按钮”
5.日期和时间控件显示本地时间(但不会变化,不是实时的)
6.日历控件选中一个日期,会在控制台输出日期
这就是结果了。
截图的话,不知道为什么截不到鼠标。
可能看的有一点迷糊。
望各位前辈指正!