#窗口控件的风格
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

class WindowStyle(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('设置窗口控件风格')
        layout = QHBoxLayout(self)
        self.styleLabel = QLabel('设置窗口风格:')
        self.styleCombobox = QComboBox()
        self.styleCombobox.addItems(QStyleFactory.keys())

        index = self.styleCombobox.findText(QApplication.style().objectName(),Qt.MatchFixedString)
        self.styleCombobox.setCurrentIndex(index)
        self.styleCombobox.activated[str].connect(self.handleStyleChanged)
        layout.addWidget(self.styleLabel)
        layout.addWidget(self.styleCombobox)

    def handleStyleChanged(self,style):
        QApplication.setStyle(style)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = WindowStyle()
    main.show()
    sys.exit(app.exec_())
#窗口样式,按钮实现窗口最大化和最小化
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

class WindowStyle(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('设置窗口样式')
        layout = QVBoxLayout(self)
        self.styleLabel = QLabel('设置窗口样式:')
        # self.setWindowFlags(Qt.WindowCloseButtonHint)

        self.btn1 = QPushButton('最大化')
        self.btn1.clicked.connect(self.maxWindow)
        self.btn2 = QPushButton('最小化')
        self.btn2.clicked.connect(self.showMinimized)
        layout.addWidget(self.btn1)
        layout.addWidget(self.btn2)
    def maxWindow(self):
        desktop = QApplication.desktop()
        rect = desktop.availableGeometry()
        self.setGeometry(rect)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = WindowStyle()
    main.show()
    sys.exit(app.exec_())
#窗口动态绘制曲线
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class DrawLine(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('鼠标绘图')
        self.resize(400,400)
        self.pix = QPixmap(400,400) #画布?
        self.pix.fill(Qt.white)
        self.startpoint = QPoint()
        self.endpoint = QPoint()

    def paintEvent(self,QPaintEvent): #窗口刷新或者装载时会自动调用这个事件 画图事件
        painter = QPainter(self)
        painter.drawLine(self.startpoint,self.endpoint)
        self.startpoint = self.endpoint
        pp = QPainter(self)
        pp.drawPixmap(0,0,self.pix)

    def mousePressEvent(self,event): #鼠标按下事件 设置开始点
        if event.button() == Qt.LeftButton:
            self.startpoint = event.pos()

    def mouseMoveEvent(self,event): #鼠标按下并且移动
        if event.buttons() and Qt.LeftButton:
            self.endpoint = event.pos()
            self.update()#窗口重新装载
    def mouseReleaseEvent(self,event): #鼠标释放
        if event.button() == Qt.LeftButton:
            self.endpoint = event.pos()
            self.update()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = DrawLine()
    main.show()
    sys.exit(app.exec_())
#时钟 【直接整段代码运行试试看 】
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import math
import sys

class DrawLine(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('时钟')
        self.resize(400,400)
        self.hour = 0 #0点(12点) 对应的度数是 90°角,
        self.minute = 59
        self.second = 0
        self.timer = QTimer() #设置时钟控件
        self.timer.start(1000)
        self.timer.timeout.connect(self.myTime) #在槽函数里实现秒针转动

    def paintEvent(self,QPaintEvent): #窗口刷新或者装载时会自动调用这个事件 画图事件,画表盘,画表针,画刻度
        self.painter = QPainter(self)
        self.painter.begin(self)
        height = self.geometry().height()
        width = self.geometry().width()
        if height>width:height = width #这里窗口的改变,长宽容易不对称,取最大的正方形,当成表盘的范围,
        else:width = height

        self.painter.drawArc(QRect(int(width/10),int(height/10),int(width*8/10),int(height*8/10)),0,360*16)
        r = width*4/10 #半径
        rx = width/2 #圆心
        ry = height/2

        #画圆心
        pen = QPen(Qt.red,4,Qt.SolidLine)
        self.painter.setPen(pen)
        self.painter.drawPoint(int(rx), int(ry))


        #画刻度
        pen = QPen(Qt.blue,2,Qt.SolidLine)
        self.painter.setPen(pen)
        for i in range(0,12): #小时刻度 占半径的1/15
            p1x = int(rx - r*math.cos(i*math.pi/6)) #圆上的点
            p1y = int(ry - r*math.sin(i*math.pi/6))
            p2x = int(rx - r * math.cos(i * math.pi / 6)*14/15) #圆内的点
            p2y = int(ry - r * math.sin(i* math.pi / 6)*14/15)

            p3x = int(rx - r * math.cos(i * math.pi / 6)*16/15) #圆外的点 以它为中心画一个矩形
            p3y = int(ry - r * math.sin(i* math.pi / 6)*16/15)

            self.painter.drawLine(p1x,p1y,p2x,p2y) #画刻度
            str_hour = str(i-3) if i>3 else str(i+9)
            self.painter.drawText(QRect(p3x-5,p3y-5,10,20),Qt.AlignCenter,str_hour) #小时文本

        for i in range(1,61): #秒刻度 占半径的 1/60
            if i%5!=0: #略过小时刻度
                p1x = int(rx - r * math.cos(i * math.pi / 30))
                p1y = int(ry - r * math.sin(i * math.pi / 30))
                p2x = int(rx - r * math.cos(i * math.pi / 30) * 59 / 60)
                p2y = int(ry - r * math.sin(i * math.pi / 30) * 59 / 60)
                self.painter.drawLine(p1x, p1y, p2x, p2y)

        #画秒针 占半径的12/15
        degree_count = (15-self.second) if self.second <16 else 75-self.second #度数计数 (最后再乘以15度)
        p2x = int(rx + r * math.cos(degree_count * math.pi / 30) * 12 / 15) #余弦是加
        p2y = int(ry - r * math.sin(degree_count * math.pi / 30) * 12 / 15)
        pen = QPen(Qt.green,2,Qt.SolidLine)
        self.painter.setPen(pen)
        self.painter.drawLine(int(rx), int(ry) , p2x, p2y)

        # 画分针 占半径的9/15
        degree_count = (15 - self.minute) if self.minute < 16 else 75 - self.minute  # 度数计数 (最后再乘以15度)
        p2x = int(rx + r * math.cos(degree_count * math.pi / 30) * 9 / 15)
        p2y = int(ry - r * math.sin(degree_count * math.pi / 30) * 9 / 15)
        pen = QPen(Qt.yellow, 2, Qt.SolidLine)
        self.painter.setPen(pen)
        self.painter.drawLine(int(rx), int(ry), p2x, p2y)

        # 画时针 占半径的6/15 时针不能总在整点,也要按照分钟的比例改变指向
        degree_count = (15 - self.hour) if self.hour < 16 else 75 - self.hour  # 度数计数 (最后再乘以15度)
        p2x = int(rx + r * math.cos(degree_count * math.pi / 6-math.pi*self.minute/360) * 6 / 15)
        p2y = int(ry - r * math.sin(degree_count * math.pi / 6 -math.pi*self.minute/360) * 6 / 15)
        pen = QPen(Qt.red, 3, Qt.SolidLine)
        self.painter.setPen(pen)
        self.painter.drawLine(int(rx), int(ry), p2x, p2y)

        self.painter.end()

    #在QTimer timeout事件里计算时分秒 频率是1s 相当于没1s更新一下整个窗口
    def myTime(self):
        self.second=self.second+1
        if self.second == 60:
            self.second=0
            self.minute=self.minute+1
            if self.minute == 60:
                self.minute=0
                self.hour=self.hour+1
                if self.hour == 12:self.hour = 0
        self.update()

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

posted on 2020-09-08 18:31  94小渣渣  阅读(127)  评论(0编辑  收藏  举报