PyQt5:第九天

设置不同风格的日期和时间

import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class DateTimeEdit1(QWidget):
    def __init__(self):
        super(DateTimeEdit1, self).__init__()
        self.setWindowTitle('设置不同风格的日期和事件')
        self.resize(300, 90)
        self.initUI()
    def initUI(self):
        layout = QVBoxLayout()

        dataTimeEdit1 = QDateTimeEdit()
        dataTimeEdit2 = QDateTimeEdit(QDateTime.currentDateTime())
        dataEdit1 = QDateTimeEdit(QDate.currentDate())
        timeEdit1 = QDateTimeEdit(QTime.currentTime())

        dataTimeEdit1.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        dataTimeEdit2.setDisplayFormat("yyyy/MM/dd HH-mm-ss")
        dataEdit1.setDisplayFormat("yyyy,MM,dd")
        timeEdit1.setDisplayFormat("HH:mm:ss")

        layout.addWidget(dataTimeEdit1)
        layout.addWidget(dataTimeEdit2)
        layout.addWidget(dataEdit1)
        layout.addWidget(timeEdit1)
        
        self.setLayout(layout)

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

在这里插入图片描述

日期和时间控件的高级操作

创建和使用菜单

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Menu(QMainWindow):
    def __init__(self):
        super(Menu,self).__init__()
        self.setWindowTitle('创建和使用菜单')
        self.resize(400, 350)
        bar = self.menuBar() # 获取菜单栏
        file = bar.addMenu("文件")

        file.addAction("新建")

        save = QAction("保存",self)
        file.addAction(save)
        save.setShortcut("Ctrl + S")
        save.triggered.connect(self.process)

        quit = QAction("退出",self)
        file.addAction(quit)

        edit = bar.addMenu("Edit")
        edit.addAction("copy")
        edit.addAction("paste")


    def process(self,a):
        print(self.sender().text())


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

在这里插入图片描述
在这里插入图片描述

创建和使用工具栏

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Toolbar(QMainWindow):
    def __init__(self):
        super(Toolbar,self).__init__()
        self.setWindowTitle('工具栏')
        self.resize(400, 300)
        self.initUI()
    def initUI(self):
        tb1 = self.addToolBar("File")
        new = QAction(QIcon(''),"new",self)
        tb1.addAction(new)
        open = QAction(QIcon(''),"open",self)
        tb1.addAction(open)
        save = QAction(QIcon(''),"save",self)
        tb1.addAction(save)
        tb1.actionTriggered.connect(self.toolbtnpressed)

        tb2 = self.addToolBar("File1")
        new1 = QAction(QIcon(''),"新建",self)
        tb2.addAction(new1)
        tb2.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
    def toolbtnpressed(self,a):
        print("按下的工具栏按钮是",a.text())

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

在这里插入图片描述

创建和使用状态栏

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class StatusBar(QMainWindow):
    def __init__(self):
        super(StatusBar,self).__init__()
        self.setWindowTitle('创建和使用状态栏')
        self.resize(300, 200)
        self.initUI()
    def initUI(self):
        bar = self.menuBar()
        file = bar.addMenu("File")
        file.addAction("show")
        file.triggered.connect(self.processTrigger)

        self.statusBar = QStatusBar()
        self.setStatusBar(self.statusBar)
    def processTrigger(self,q):
        if q.text() == "show":
            self.statusBar.showMessage(q.text() + "菜单被点击了",5000)

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

在这里插入图片描述

使用打印机

显示打印对话框

显示二维表数据

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
class TabelView(QWidget):
    def __init__(self, arg=None):
        super().__init__(arg)
        self.setWindowTitle('QTableView表格视图控件演示')
        self.resize(500,300)

        self.model = QStandardItemModel(4,3)
        self.model.setHorizontalHeaderLabels(['id','姓名','年龄'])

        self.tableview = QTableView()
        # 关联QTableView控件和Model
        self.tableview.setModel(self.model)

        # 添加数据
        item11 = QStandardItem('10')
        item12 = QStandardItem('雷神')
        item13 = QStandardItem('2000')
        self.model.setItem(0,0,item11)
        self.model.setItem(0, 1, item12)
        self.model.setItem(0, 2, item13)

        layout = QVBoxLayout()
        layout.addWidget(self.tableview)
        self.setLayout(layout)


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

在这里插入图片描述

显示列表数据

import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class ListViewDemo(QWidget):
    def __init__(self):
        super(ListViewDemo, self).__init__()
        self.setWindowTitle('QListView')
        self.resize(300, 270)

        listview = QListView()
        listModel = QStringListModel()
        self.list = ["列表项1","列表项2","列表项3"]
        listModel.setStringList(self.list)
        listview.setModel(listModel)
        listview.clicked.connect(self.clicked)

        layout = QVBoxLayout()
        layout.addWidget(listview)
        self.setLayout(layout)

    def clicked(self,item):
        QMessageBox.information(self,"QListView","您选择了" + self.list[item.row()])


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

在这里插入图片描述
在这里插入图片描述

扩展的列表控件

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class ListWidgetDemo(QMainWindow):
    def __init__(self):
        super(ListWidgetDemo,self).__init__()
        self.setWindowTitle('QListWidget')
        self.resize(300, 270)
        self.listwidget = QListWidget()
        self.listwidget.addItem("item1")
        self.listwidget.addItem("item2")
        self.listwidget.addItem("item3")
        self.listwidget.addItem("item4")
        self.listwidget.addItem("item5")
        self.setCentralWidget(self.listwidget)
        self.listwidget.itemClicked.connect(self.clicked)
    def clicked(self,Index):
        QMessageBox.information(self,"QListWidget","您选择了:" + self.listwidget.item(self.listwidget.row(Index)).text())

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

在这里插入图片描述
在这里插入图片描述

扩展的表格控件

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class TableWidget(QWidget):
    def __init__(self):
        super(TableWidget,self).__init__()
        self.setWindowTitle('TableWidget')
        self.resize(400, 350)
        tablewidget = QTableWidget()
        tablewidget.setRowCount(4)
        tablewidget.setColumnCount(3)
        tablewidget.setHorizontalHeaderLabels(['姓名','年龄','籍贯'])
        nameItem = QTableWidgetItem("小明")
        tablewidget.setItem(0,0,nameItem)
        ageItem = QTableWidgetItem("24")
        tablewidget.setItem(0, 1, ageItem)
        jgItem = QTableWidgetItem("北京")
        tablewidget.setItem(0, 2, jgItem)
        layout = QHBoxLayout()
        layout.addWidget(tablewidget)
        self.setLayout(layout)
        # 调整列和行
        tablewidget.resizeColumnsToContents()
        tablewidget.resizeRowsToContents()
        # 表头
        # tablewidget.horizontalHeader().setVisible(False)
        # tablewidget.verticalHeader().setVisible(False)
        # 隐藏表格线
        tablewidget.setShowGrid(False)


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

在这里插入图片描述

在单元格中放置控件

# PlaceControlInCell
import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class PlaceControlInCell(QWidget):
    def __init__(self):
        super(PlaceControlInCell,self).__init__()
        self.setWindowTitle('PlaceControlInCell')
        self.resize(500, 300)
        tablewidget = QTableWidget()
        tablewidget.setColumnCount(3)
        tablewidget.setRowCount(4)
        tablewidget.setHorizontalHeaderLabels(['姓名','性别','体重'])

        textItem = QTableWidgetItem('小明')
        tablewidget.setItem(0,0,textItem)

        combox = QComboBox()
        combox.addItem('男')
        combox.addItem('女')
        # QSS
        combox.setStyleSheet('QComboBox(margin:3px);')
        tablewidget.setCellWidget(0,1,combox)

        modeifyButton = QPushButton('修改')
        modeifyButton.setDown(True)
        modeifyButton.setStyleSheet('QPushButton(margin:3px);')
        tablewidget.setCellWidget(0, 2, modeifyButton)

        layout = QVBoxLayout()
        layout.addWidget(tablewidget)
        self.setLayout(layout)


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

在这里插入图片描述

在表格中快速定位到特殊的行

设置单元格字体和颜色

import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class CellFontAndColor(QWidget):
    def __init__(self):
        super(CellFontAndColor, self).__init__()
        self.setWindowTitle('设置单元格字体和颜色')
        self.resize(430, 230)
        tablewidget = QTableWidget()
        tablewidget.setRowCount(4)
        tablewidget.setColumnCount(3)
        tablewidget.setHorizontalHeaderLabels(['姓名', '年龄', '籍贯'])
        layout = QHBoxLayout()
        layout.addWidget(tablewidget)
        self.setLayout(layout)

        newItem = QTableWidgetItem('雷神')
        newItem.setFont(QFont('Times',14,QFont.Black))
        newItem.setForeground(QBrush(QColor(255,0,0)))
        tablewidget.setItem(0,0,newItem)

        newItem = QTableWidgetItem('女')
        newItem.setForeground(QBrush(QColor(255, 255, 0)))
        newItem.setBackground(QBrush(QColor(0, 0, 255)))
        tablewidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem('160')
        newItem.setFont(QFont('Times', 20, QFont.Black))
        newItem.setForeground(QBrush(QColor(0, 0, 255)))
        tablewidget.setItem(0, 2, newItem)


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

在这里插入图片描述

按表格的某一列排序

设置单元格的文本对齐方式

合并单元格

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Span(QWidget):
    def __init__(self):
        super(Span,self).__init__()
        self.setWindowTitle('合并单元格')
        self.resize(430, 230)
        tablewidget = QTableWidget()
        tablewidget.setRowCount(4)
        tablewidget.setColumnCount(3)
        tablewidget.setHorizontalHeaderLabels(['姓名', '年龄', '籍贯'])
        layout = QHBoxLayout()
        layout.addWidget(tablewidget)
        self.setLayout(layout)

        newItem = QTableWidgetItem('雷神')
        tablewidget.setItem(0,0,newItem)
        tablewidget.setSpan(0,0,3,1)

        newItem = QTableWidgetItem('女')
        tablewidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem('160')
        tablewidget.setItem(0, 2, newItem)


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

在这里插入图片描述

设置单元格的尺寸

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class CellSize(QWidget):
    def __init__(self):
        super(CellSize,self).__init__()
        self.setWindowTitle('设置单元格尺寸')
        self.resize(530, 300)
        tablewidget = QTableWidget()
        tablewidget.setRowCount(4)
        tablewidget.setColumnCount(3)
        tablewidget.setHorizontalHeaderLabels(['姓名', '年龄', '籍贯'])
        layout = QHBoxLayout()
        layout.addWidget(tablewidget)
        self.setLayout(layout)

        newItem = QTableWidgetItem('雷神')
        newItem.setFont(QFont('Times', 40, QFont.Black))
        newItem.setForeground(QBrush(QColor(255, 0, 0)))
        tablewidget.setItem(0, 0, newItem)

        newItem = QTableWidgetItem('女')
        newItem.setForeground(QBrush(QColor(255, 255, 0)))
        newItem.setBackground(QBrush(QColor(0, 0, 255)))
        tablewidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem('160')
        newItem.setFont(QFont('Times', 20, QFont.Black))
        newItem.setForeground(QBrush(QColor(0, 0, 255)))
        tablewidget.setItem(0, 2, newItem)

        tablewidget.setRowHeight(0,80)
        tablewidget.setColumnWidth(0,200)
        tablewidget.setColumnWidth(2, 120)


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

在这里插入图片描述

单元格中实现图文混排

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class CellImageText(QWidget):
    def __init__(self):
        super(CellImageText,self).__init__()
        self.setWindowTitle('单元格实现图文混排')
        self.resize(600, 300)
        self.tablewidget = QTableWidget()
        self.tablewidget.setRowCount(5)
        self.tablewidget.setColumnCount(4)
        self.tablewidget.setHorizontalHeaderLabels(['姓名', '年龄', '籍贯', '显示图片'])
        layout = QHBoxLayout()
        layout.addWidget(self.tablewidget)
        self.setLayout(layout)

        newItem = QTableWidgetItem('李宁')
        self.tablewidget.setItem(0,0,newItem)
        newItem = QTableWidgetItem('男')
        self.tablewidget.setItem(0, 1, newItem)
        newItem = QTableWidgetItem('160')
        self.tablewidget.setItem(0, 2, newItem)
        newItem = QTableWidgetItem(QIcon('D:/PycharmProjects/pro2/2.png'),'背包')
        self.tablewidget.setItem(0, 3, newItem)



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

在这里插入图片描述

改变单元格中图片的尺寸

在表格中显示上下文菜单

树控件

import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class BasicTreeWidget(QWidget):
    def __init__(self):
        super(BasicTreeWidget, self).__init__()
        self.setWindowTitle('BasicTreeWidget')
        self.tree = QTreeWidget()
        # 为树控件指定列数
        self.tree.setColumnCount(2)
        # 指定列标签
        self.tree.setHeaderLabels(['Key','Value'])

        root = QTreeWidgetItem(self.tree)
        root.setText(0,'根节点')
        root.setIcon(0,QIcon(''))
        self.tree.setColumnWidth(0,160)
        # 添加子节点
        child = QTreeWidgetItem(root)
        child.setText(0,'子节点')
        child.setText(1,'子节点的数据')
        child.setIcon(0,QIcon(''))
        child.setCheckState(0, Qt.Checked)

        layout = QHBoxLayout()
        layout.addWidget(self.tree)
        self.setLayout(layout)



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

在这里插入图片描述

为树节点添加响应事件

选项卡控件

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class TabWidget(QTabWidget):
    def __init__(self):
        super(TabWidget,self).__init__()
        self.setWindowTitle('TabWidget')
        self.resize(400,300)
        # 创建用于显示控件的窗口
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()
        self.addTab(self.tab1,'选项卡1')
        self.addTab(self.tab2, '选项卡2')
        self.addTab(self.tab3, '选项卡3')

        self.tab1UI()
        self.tab2UI()

    def tab1UI(self):
        layout = QFormLayout()
        layout.addRow('姓名',QLineEdit())
        layout.addRow('地址',QLineEdit())
        self.setTabText(0,'联系方式')
        self.tab1.setLayout(layout)
    def tab2UI(self):
        layout = QFormLayout()
        sex = QHBoxLayout()
        sex.addWidget(QRadioButton('男'))
        sex.addWidget(QRadioButton('女'))
        layout.addRow('性别',sex)
        layout.addRow('生日',QLineEdit())
        self.setTabText(1,'个人详细信息')
        self.tab2.setLayout(layout)
    def tab3UI(self):
        pass



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

在这里插入图片描述
在这里插入图片描述

堆栈窗口控件

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class StackedWidget(QWidget):
    def __init__(self):
        super(StackedWidget,self).__init__()
        self.setWindowTitle('StackedWidget')

        self.list = QListWidget()
        self.list.insertItem(0,'联系方式')
        self.list.insertItem(1,'个人信息')
        self.list.insertItem(2,'教育程度')
        self.list.currentRowChanged.connect(self.display)

        self.stack1 = QWidget()
        self.stack2 = QWidget()
        self.stack3 = QWidget()

        self.tab1UI()
        self.tab2UI()
        self.tab3UI()

        self.stack = QStackedWidget()
        self.stack.addWidget(self.stack1)
        self.stack.addWidget(self.stack2)
        self.stack.addWidget(self.stack3)

        hbox = QHBoxLayout()
        hbox.addWidget(self.list)
        hbox.addWidget(self.stack)
        self.setLayout(hbox)

    def tab1UI(self):
        layout = QFormLayout()
        layout.addRow('姓名',QLineEdit())
        layout.addRow('地址',QLineEdit())
        self.stack1.setLayout(layout)
    def tab2UI(self):
        layout = QFormLayout()
        sex = QHBoxLayout()
        sex.addWidget(QRadioButton('男'))
        sex.addWidget(QRadioButton('女'))
        layout.addRow('性别',sex)
        layout.addRow('生日',QLineEdit())
        self.stack2.setLayout(layout)
    def tab3UI(self):
        layout = QHBoxLayout()
        layout.addWidget(QLabel('科目'))
        layout.addWidget(QCheckBox('物理'))
        layout.addWidget(QCheckBox('高数'))
        self.stack3.setLayout(layout)
    def display(self,index):
        self.stack.setCurrentIndex(index)


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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

停靠控件

容纳多文档的窗口

滚动条控件

# ScrollBar
import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class ScrollBar(QWidget):
    def __init__(self):
        super(ScrollBar,self).__init__()
        self.setWindowTitle('ScrollBar')

        self.label = QLabel('拖动滚动条来改变状态')

        self.scrollbar1 = QScrollBar()
        self.scrollbar1.setMaximum(255)
        self.scrollbar1.sliderMoved.connect(self.sliderMoved)

        self.scrollbar2 = QScrollBar()
        self.scrollbar2.setMaximum(255)
        self.scrollbar2.sliderMoved.connect(self.sliderMoved)

        self.scrollbar3 = QScrollBar()
        self.scrollbar3.setMaximum(255)
        self.scrollbar3.sliderMoved.connect(self.sliderMoved)

        self.scrollbar4 = QScrollBar()
        self.scrollbar4.setMaximum(255)
        self.scrollbar4.sliderMoved.connect(self.sliderMoved1)

        hbox = QHBoxLayout()
        hbox.addWidget(self.label)
        hbox.addWidget(self.scrollbar1)
        hbox.addWidget(self.scrollbar2)
        hbox.addWidget(self.scrollbar3)
        hbox.addWidget(self.scrollbar4)

        self.setGeometry(300,300,300,200)

        self.y = self.label.pos().y()

        self.setLayout(hbox)
    def sliderMoved(self):
        palette = QPalette()
        color = QColor(self.scrollbar1.value(),self.scrollbar2.value(),self.scrollbar3.value(),255)
        palette.setColor(QPalette.Foreground, color)
        self.label.setPalette(palette)
    def sliderMoved1(self):
        self.label.move(self.label.x(), self.y+self.scrollbar4.value())



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

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值