用python+pyqt5手工编写一个含交互界面的简易的词法分析器

python+pyqt5手工编写一个含交互界面的简易词法分析器

@author:x1nge.

  • 编译原理基础实验

基础

在之前的一篇博文中我记录了一个不含交互界面的简易词法分析器程序编写内容 点击此处查看
在本文我将用pyqt5写一个简单的交互界面,也修改了部分代码使得程序更加完整。

具体实验分析

本文全部源码见本文末尾,上次编写的不含交互界面的源码也可点此处下载

  1. 交互界面可以用QtDesigner快速编写,或者自己写,我采用的是用可视化界面创建了一个大致的框架,然后再手动添加其他需要的控件,或者微调一些属性。
    我简单设计的交互界面如图所示:
    p1

有话说: 这边以C和C++为输入语言,其他语言有一些差别,可以自行修改代码。

  1. UI设计部分,主体代码由pyuic转换后自动获得,分析一下代码,会发现其实很简单,也便于我们之后修改代码或属性。
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(694, 470)
        MainWindow.setFixedSize(694,470)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.text_input = QtWidgets.QTextEdit(self.centralwidget)
        self.text_input.setGeometry(QtCore.QRect(20, 40, 241, 351))
        self.text_input.setObjectName("text_input")
        self.btn_local = QtWidgets.QPushButton(self.centralwidget)
        self.btn_local.setGeometry(QtCore.QRect(20, 400, 101, 30))
        self.btn_local.setObjectName("btn_local")
        self.text_address = QtWidgets.QTextEdit(self.centralwidget)
        self.text_address.setGeometry(QtCore.QRect(136, 400, 396, 30))
        self.text_address.setObjectName("text_address")
        self.btn_get = QtWidgets.QPushButton(self.centralwidget)
        self.btn_get.setGeometry(QtCore.QRect(556, 400, 126, 30))
        self.btn_get.setObjectName("btn_get")
        self.btn_clear_address = QtWidgets.QPushButton(self.centralwidget)
        self.btn_clear_address.setGeometry(QtCore.QRect(570, 360, 101, 26))
        self.btn_clear_address.setObjectName("btn_clear_address")
        self.lb_text = QtWidgets.QLabel(self.centralwidget)
        self.lb_text.setGeometry(QtCore.QRect(20, 20, 91, 16))
        self.lb_text.setObjectName("lb_text")
        self.rbtn_java = QtWidgets.QRadioButton(self.centralwidget)
        self.rbtn_java.setGeometry(QtCore.QRect(570, 90, 115, 19))
        self.rbtn_java.setObjectName("rbtn_java")
        self.rbtn_java.setEnabled(False)
        self.buttonGroup = QtWidgets.QButtonGroup(MainWindow)
        self.buttonGroup.setObjectName("buttonGroup")
        self.buttonGroup.addButton(self.rbtn_java)
        self.rbtn_python = QtWidgets.QRadioButton(self.centralwidget)
        self.rbtn_python.setEnabled(False)
        self.rbtn_python.setGeometry(QtCore.QRect(570, 121, 115, 19))
        self.rbtn_python.setObjectName("rbtn_python")
        self.buttonGroup.addButton(self.rbtn_python)
        self.rbtn_c = QtWidgets.QRadioButton(self.centralwidget)
        self.rbtn_c.setEnabled(True)
        self.rbtn_c.setGeometry(QtCore.QRect(570, 150, 115, 19))
        self.rbtn_c.setObjectName("rbtn_c")
        self.rbtn_c.setChecked(True)
        self.buttonGroup.addButton(self.rbtn_c)
        self.rbtn_cpp = QtWidgets.QRadioButton(self.centralwidget)
        self.rbtn_cpp.setGeometry(QtCore.QRect(570, 179, 115, 19))
        self.rbtn_cpp.setObjectName("rbtn_cpp")
        self.buttonGroup.addButton(self.rbtn_cpp)
        self.rbtn_html = QtWidgets.QRadioButton(self.centralwidget)
        self.rbtn_html.setEnabled(False)
        self.rbtn_html.setGeometry(QtCore.QRect(570, 211, 115, 19))
        self.rbtn_html.setObjectName("rbtn_html")
        self.buttonGroup.addButton(self.rbtn_html)
        self.lb_choice = QtWidgets.QLabel(self.centralwidget)
        self.lb_choice.setGeometry(QtCore.QRect(570, 60, 72, 15))
        self.lb_choice.setObjectName("lb_choice")
        self.text_output = QtWidgets.QTextEdit(self.centralwidget)
        self.text_output.setGeometry(QtCore.QRect(280, 40, 251, 351))
        self.text_output.setObjectName("text_output")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(280, 20, 72, 15))
        self.label.setObjectName("label")
        self.btn_run = QtWidgets.QPushButton(self.centralwidget)
        self.btn_run.setGeometry(QtCore.QRect(570, 240, 101, 26))
        self.btn_run.setObjectName("btn_run")
        self.lb_name = QtWidgets.QLabel(self.centralwidget)
        self.lb_name.setEnabled(True)
        self.lb_name.setGeometry(QtCore.QRect(650, 446, 51, 20))
        self.lb_name.setObjectName("lb_name")
        self.btn_clear_input = QtWidgets.QPushButton(self.centralwidget)
        self.btn_clear_input.setGeometry(QtCore.QRect(570, 279, 101, 26))
        self.btn_clear_input.setObjectName("btn_clear_input")
        self.btn_clear_output = QtWidgets.QPushButton(self.centralwidget)
        self.btn_clear_output.setGeometry(QtCore.QRect(570, 320, 101, 26))
        self.btn_clear_output.setObjectName("btn_clear_output")
        # MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        # MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

x1Nge.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值