使用PyQt5实现日记本demo

 1.UI界面代码

使用Qt Designer设计界面,自动生成的代码

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\Python\ptqt\PyqtCode\diary_book\diary.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(377, 442)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.groupBox = QtWidgets.QGroupBox(self.centralWidget)
        self.groupBox.setGeometry(QtCore.QRect(10, 70, 341, 331))
        self.groupBox.setObjectName("groupBox")
        self.textEdit_write_diary = QtWidgets.QTextEdit(self.groupBox)
        self.textEdit_write_diary.setGeometry(QtCore.QRect(10, 110, 321, 221))
        self.textEdit_write_diary.setObjectName("textEdit_write_diary")
        self.label = QtWidgets.QLabel(self.groupBox)
        self.label.setGeometry(QtCore.QRect(20, 32, 54, 12))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.groupBox)
        self.label_2.setGeometry(QtCore.QRect(20, 65, 54, 12))
        self.label_2.setObjectName("label_2")
        self.lineEdit_date = QtWidgets.QLineEdit(self.groupBox)
        self.lineEdit_date.setGeometry(QtCore.QRect(60, 30, 130, 20))
        self.lineEdit_date.setObjectName("lineEdit_date")
        self.lineEdit_weather = QtWidgets.QLineEdit(self.groupBox)
        self.lineEdit_weather.setGeometry(QtCore.QRect(60, 60, 113, 20))
        self.lineEdit_weather.setObjectName("lineEdit_weather")
        self.label_3 = QtWidgets.QLabel(self.groupBox)
        self.label_3.setGeometry(QtCore.QRect(20, 90, 54, 12))
        self.label_3.setObjectName("label_3")
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralWidget)
        self.groupBox_2.setGeometry(QtCore.QRect(20, 10, 201, 51))
        self.groupBox_2.setObjectName("groupBox_2")
        self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.groupBox_2)
        self.dateTimeEdit.setGeometry(QtCore.QRect(0, 20, 194, 22))
        self.dateTimeEdit.setObjectName("dateTimeEdit")
        
        self.groupBox_3 = QtWidgets.QGroupBox(self.centralWidget)
        self.groupBox_3.setGeometry(QtCore.QRect(230, 10, 120, 51))
        self.groupBox_3.setObjectName("groupBox_3")
        self.comboBox = QtWidgets.QComboBox(self.groupBox_3)
        self.comboBox.setGeometry(QtCore.QRect(30, 20, 69, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 377, 23))
        self.menuBar.setObjectName("menuBar")
        self.menu = QtWidgets.QMenu(self.menuBar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menuBar)
        self.menu_2.setObjectName("menu_2")
        self.menu_3 = QtWidgets.QMenu(self.menuBar)
        self.menu_3.setTitle("")
        self.menu_3.setObjectName("menu_3")
        MainWindow.setMenuBar(self.menuBar)
        self.action_open = QtWidgets.QAction(MainWindow)
        self.action_open.setObjectName("action_open")
        self.action_close = QtWidgets.QAction(MainWindow)
        self.action_close.setObjectName("action_close")
        self.action_alter = QtWidgets.QAction(MainWindow)
        self.action_alter.setObjectName("action_alter")
        self.action_save = QtWidgets.QAction(MainWindow)
        self.action_save.setObjectName("action_save")
        self.action_about = QtWidgets.QAction(MainWindow)
        self.action_about.setObjectName("action_about")
        self.menu.addAction(self.action_open)
        self.menu.addSeparator()
        self.menu.addAction(self.action_alter)
        self.menu.addAction(self.action_save)
        self.menu.addAction(self.action_close)
        self.menu_2.addAction(self.action_about)
        self.menuBar.addAction(self.menu.menuAction())
        self.menuBar.addAction(self.menu_2.menuAction())
        self.menuBar.addAction(self.menu_3.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.groupBox.setTitle(_translate("MainWindow", "写日记"))
        self.label.setText(_translate("MainWindow", "日期:"))
        self.label_2.setText(_translate("MainWindow", "天气:"))
        self.label_3.setText(_translate("MainWindow", "内容"))
        self.groupBox_2.setTitle(_translate("MainWindow", "日期"))
        self.groupBox_3.setTitle(_translate("MainWindow", "天气"))
        self.comboBox.setItemText(0, _translate("MainWindow", "晴朗"))
        self.comboBox.setItemText(1, _translate("MainWindow", "下雨"))
        self.comboBox.setItemText(2, _translate("MainWindow", "阴天"))
        self.comboBox.setItemText(3, _translate("MainWindow", "下雪"))
        self.comboBox.setItemText(4, _translate("MainWindow", "雾霾"))
        self.menu.setTitle(_translate("MainWindow", "文件"))
        self.menu_2.setTitle(_translate("MainWindow", "关于我们"))
        self.action_open.setText(_translate("MainWindow", "打开日记本"))
        self.action_close.setText(_translate("MainWindow", "关闭"))
        self.action_alter.setText(_translate("MainWindow", "修改日记"))
        self.action_save.setText(_translate("MainWindow", "保存日记"))
        self.action_about.setText(_translate("MainWindow", "关于"))


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_())

2.功能代码

# -*- coding: utf-8 -*-

"""
Module implementing MainWindow.
"""

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QMessageBox

from Ui_diary import Ui_MainWindow
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QWidget,QFileDialog
from PyQt5.QtCore import QDate,QDateTime,QTime

class MainWindow(QMainWindow, Ui_MainWindow):
    """
    记账本小demo
    """
    def __init__(self, parent=None):
        """
        初始化界面
        """
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        #弹出日历控件
        self.dateTimeEdit.setCalendarPopup(True)
        #信号
        self.dateTimeEdit.dateTimeChanged.connect(self.display_date)
        self.comboBox.currentIndexChanged.connect(self.display_weather) 
       
     
    def display_date(self):
        """把所选择的日期显示在单行文本框中"""
        
        date = self.dateTimeEdit.date()
        date_info = self.lineEdit_date.setText(date.toString("yyyy-MM-dd dddd"))
        date_info = self.textEdit_write_diary.setPlainText(date.toString("yyyy-MM-dd dddd") + '\n')
              
 
    def display_weather(self,weather):  
        """把所选择的天气显示在单行文本框中"""
        
        weather = self.comboBox.currentText()
        self.lineEdit_weather.setText(weather)
        #self.textEdit_write_diary.setPlainText(a + weather)  
    
    @pyqtSlot()
    def on_action_open_triggered(self):
        """
        打开文件,显示在多行文本框中,即显示日记在文本框中
        """
        print("打开")
        filename=QFileDialog.getOpenFileName(self,'打开文件夹','.')
        #r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
        #关键字with在不再需要访问文件后将其关闭 ,open返回的对象存储在f这个变量当中
        with open(filename[0],'r') as f:
            my_txt=f.read()
            self.textEdit_write_diary.setPlainText(my_txt)
            
    @pyqtSlot()
    def on_action_alter_triggered(self):
        """
        修改日记
        """
        print("修改日记")
        filename=QFileDialog.getOpenFileName(self,'打开文件夹','.')
        #r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
        #关键字with在不再需要访问文件后将其关闭 ,open返回的对象存储在f这个变量当中
        with open(filename[0],'r') as f:
            my_txt=f.read()
            self.textEdit_write_diary.setPlainText(my_txt)
            
    
    @pyqtSlot()
    def on_action_save_triggered(self):
        """
        Slot documentation goes here.
        """
        filename=QFileDialog.getSaveFileName(self,'保存文件','.')
        with open(filename[0],'w') as f:
            my_text=self.textEdit_write_diary.toPlainText()
            f.write(my_text)
        
    @pyqtSlot()
    def on_action_close_triggered(self):
        """
        关闭窗口
        """
        main_Window = QApplication.instance()
        main_Window.quit()
        
    
    @pyqtSlot()
    def on_action_about_triggered(self):
        """
        弹出一个对画框
        """
        QMessageBox.information(self, '关于我们', '欢迎使用日记本小程序~')
        
        
if __name__ == "__main__":   
    app = QtWidgets.QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())

3.结果展示

 

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyQt5是一个结合了Python语言和Qt库的工具包,可以用于创建用户界面应用程序。为了实现一个电池形状的进度条,你可以使用`QGraphicsView`、`QGraphicsScene`以及自定义的`QGraphicsItem`来模拟这个效果。这里提供一个简化的Demo代码示例: ```python import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import Qt from PyQt5.QtGui import QPainter, QPen, QColor, QGraphicsRectItem, QGraphicsPathItem, QPointF from PyQt5.QtSvg import QSvg class BatteryBar(QGraphicsRectItem): def __init__(self, parent=None, width=100, height=15, value=0): super().__init__(parent) self.setRect(0, 0, width, height) self.value = value self.path = self.createBatteryPath() def paint(self, painter, option, widget): painter.setRenderHint(QPainter.Antialiasing) painter.drawPath(self.path) def createBatteryPath(self): svg_data = QSvg().load('battery.svg') # 加载电池形状的SVG文件 svg_item = QGraphicsPathItem() svg_item.addPixmap(svg_data.pixmap()) path = svg_item.boundingRect().translated(self.pos()).toPath() return path.simplify(4).translated(-self.pos()) def main(): app = QApplication(sys.argv) scene = QGraphicsScene() battery_bar = BatteryBar(value=80) # 设置初始进度为80% scene.addItem(battery_bar) view = QGraphicsView(scene) view.setSceneRect(scene.itemsBoundingRect()) view.resize(300, 200) view.show() sys.exit(app.exec_()) if __name__ == "__main__": main() ``` 在这个例子中,我们首先从一个SVG文件(如'battery.svg')加载电池形状,然后将其转换为`QGraphicsPathItem`。接着,在`paint()`函数中绘制路径。进度值会通过改变`BatteryBar`的宽度比例来显示。 请注意,你需要有一个名为'battery.svg'的SVG文件来包含电池形状,这通常需要你自己设计并保存。此外,这个示例假设SVG文件中的路径适合用于表示电池的渐进状态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值