猫史档案馆


【Python作品分享】python模拟器【作品秀】

用户:中华程序员中华程序员查看:0 回复:2 评论:0 创建时间:2020-05-14T17:24:24


【作品展示】

center_image

 

【作品介绍】

Python模拟器(随身Py),超实用,还有系统托盘功能。请大家多多点赞👍

 

【作品源代码】

import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *


class Ui_Code(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(731, 668)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.te_code = QTextEdit(self.centralwidget)
        self.te_code.setObjectName(u"te_code")
        self.te_code.setGeometry(QRect(喵))
        font = QFont()
        font.setPointSize(13)
        self.te_code.setFont(font)
        self.lb_title = QLabel(self.centralwidget)
        self.lb_title.setObjectName(u"lb_title")
        self.lb_title.setGeometry(QRect(310, 0, 131, 71))
        font1 = QFont()
        font1.setPointSize(30)
        self.lb_title.setFont(font1)
        self.splitter = QSplitter(self.centralwidget)
        self.splitter.setObjectName(u"splitter")
        self.splitter.setGeometry(QRect(10, 70, 711, 41))
        self.splitter.setOrientation(Qt.Horizontal)
        self.pbtn_play = QPushButton(self.splitter)
        self.pbtn_play.setObjectName(u"pbtn_play")
        self.pbtn_play.setFont(font)
        self.splitter.addWidget(self.pbtn_play)
        self.pbtn_clean = QPushButton(self.splitter)
        self.pbtn_clean.setObjectName(u"pbtn_clean")
        self.pbtn_clean.setFont(font)
        self.splitter.addWidget(self.pbtn_clean)
        self.pbtn_new = QPushButton(self.splitter)
        self.pbtn_new.setObjectName(u"pbtn_new")
        self.pbtn_new.setFont(font)
        self.splitter.addWidget(self.pbtn_new)
        self.pbtn_save = QPushButton(self.splitter)
        self.pbtn_save.setObjectName(u"pbtn_save")
        self.pbtn_save.setFont(font)
        self.splitter.addWidget(self.pbtn_save)
        self.pbtn_save2 = QPushButton(self.splitter)
        self.pbtn_save2.setObjectName(u"pbtn_save2")
        self.pbtn_save2.setFont(font)
        self.splitter.addWidget(self.pbtn_save2)
        self.pbtn_open = QPushButton(self.splitter)
        self.pbtn_open.setObjectName(u"pbtn_open")
        self.pbtn_open.setFont(font)
        self.splitter.addWidget(self.pbtn_open)
        self.pbtn_back = QPushButton(self.splitter)
        self.pbtn_back.setObjectName(u"pbtn_back")
        self.pbtn_back.setFont(font)
        self.splitter.addWidget(self.pbtn_back)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate(
            "MainWindow", u"\u968f\u8eabPy\u8f6f\u4ef6", None))
        self.lb_title.setText(QCoreApplication.translate(
            "MainWindow", u"\u968f\u8eabPy", None))
        self.pbtn_play.setText(QCoreApplication.translate(
            "MainWindow", u"\u8fd0\u884c", None))
        self.pbtn_clean.setText(QCoreApplication.translate(
            "MainWindow", u"\u6e05\u7a7a", None))
        self.pbtn_new.setText(QCoreApplication.translate(
            "MainWindow", u"\u65b0\u5efa", None))
        self.pbtn_save.setText(QCoreApplication.translate(
            "MainWindow", u"\u4fdd\u5b58", None))
        self.pbtn_save2.setText(QCoreApplication.translate(
            "MainWindow", u"\u53e6\u5b58\u4e3a", None))
        self.pbtn_open.setText(QCoreApplication.translate(
            "MainWindow", u"\u6253\u5f00", None))
        self.pbtn_back.setText(QCoreApplication.translate(
            "MainWindow", u"\u9000\u51fa", None))
    # retranslateUi


class Tray(QSystemTrayIcon):
    def __init__(self):
        super().__init__()
        self.setup()
        self.show()

    def setup(self):
        self.is_show = True
        self.icon = QIcon("Py.jpg")
        self.setIcon(self.icon)
        self.activated.connect(self.process)
        self.Code = Code()
        self.add_menu()
        self.show()

    def process(self, key):
        if key == self.Trigger:
            if self.is_show:
                self.is_show = False
                self.Code.hide()
            else:
                self.is_show = True
                self.Code.show()

    def add_menu(self):
        self.menu = QMenu()
        action = QAction("显示窗口", self, triggered=self.show_window)
        self.menu.addAction(action)
        action2 = QAction("隐藏窗口", self, triggered=self.hide_window)
        self.menu.addAction(action2)
        action3 = QAction("运行", self, triggered=self.play)
        self.menu.addAction(action3)
        action4 = QAction("退出", self, triggered=self.back)
        self.menu.addAction(action4)
        self.setContextMenu(self.menu)

    def show_window(self):
        self.Code.show()

    def hide_window(self):
        self.Code.hide()

    def play(self):
        self.Code.play()

    def back(self):
        sys.exit()


class Code(QMainWindow, Ui_Code):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setup()
        self.show()

    def setup(self):
        self.file_path = None
        self.pbtn_play.clicked.connect(self.play)
        self.pbtn_clean.clicked.connect(self.clean)
        self.pbtn_save.clicked.connect(self.save)
        self.pbtn_save2.clicked.connect(self.save2)
        self.pbtn_open.clicked.connect(self.open)
        self.pbtn_back.clicked.connect(self.back)
        self.pbtn_new.clicked.connect(self.new)

    def play(self):
        try:
            self.code = self.te_code.toPlainText()
            exec(self.code)

        except:
            if self.code != "":
                QMessageBox.warning(self, "随身Py", "代码有问题,请检查~")

    def clean(self):
        self.te_code.setText("")

    def save(self):
        if self.file_path is None or self.file_path != "":
            try:
                self.file_path = QFileDialog.getSaveFileName(
                    self, caption="随身Py", filter="*.py")[0]
                with open(self.file_path, "w", encoding="utf-8") as f:
                    f.write(self.file_path)

                QMessageBox.information(self, "随身Py", "保存成功~")
            except:
                QMessageBox.warning(self, "随身Py", "保存PY文件失败~")

        else:
            with open(self.file_path, "w", encoding="utf-8") as f:
                f.write(self.file_path)
            QMessageBox.information(self, "随身Py", "保存成功~")

    def save2(self):
        try:
            self.file_path = QFileDialog.getSaveFileName(
                self, caption="随身Py", filter="(*.py)")[0]
            with open(self.file_path, "w", encoding="utf-8") as f:
                f.write(self.code)
            QMessageBox.information(self, "随身Py", "保存成功~")

        except:
            QMessageBox.warning(self, "随身Py", "另存为PY文件失败~")

    def open(self):
        try:
            file_path = QFileDialog.getOpenFileName(
                self, caption="随身Py", filter="(*.py)")[0]
            with open(file_path, "r", encoding="utf-8") as f:
                data = f.read()
                self.te_code.setText(str(data))
        except:
            QMessageBox.warning(self, "随身Py", "打开PY文件失败~")

    def back(self):
        sys.exit()

    def new(self):
        if self.file_path is None:
            chbool = QMessageBox.information(
                self, 
                "随身Py", "还未保存当前文件,是否新建?",
                QMessageBox.Yes, 
                QMessageBox.No,)
            
            if chbool == QMessageBox.Yes:
                self.file_path = None
                self.te_code.setText("")
        
        else:
            self.file_path = None
            self.te_code.setText("")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    tray = Tray()
    # window = Code()
    sys.exit(app.exec_())

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
tq_xyytq_xyy

呃呃呃呃

感觉直接用Tcl/Tk + Win32 API就好了,不用PySide2

点赞0


评论


中华程序员中华程序员

图标图片可以直接另存封面图片

点赞1


评论