\nusing namespace std;\n\nint main() {\n\tcout << "Hello C++";\n\treturn 0;\n}'), ('C', 7, '#include
\n\nint main() {\n\tprintf("Hello C!");\n\treturn 0;\n}'), ('Java', 8, 'public class HelloWorld {\n\tpublic static void main(String []args) {\n\t\tSystem.out.println("Hello Java!");\n\t}\n}'), ('Python 3', 15, 'print("Hello Python 3!")'), ('Python', 0, 'print "Hello Python!"'), ('PHP', 3, '
') ) def __init__(self, parent): super().__init__(parent) self.addItems(['{} 在线工具'.format(language[0]) for language in self.languages]) @property def language(self): return self.languages[self.currentIndex()][1] @property def code(self): return self.languages[self.currentIndex()][2] class Editor(QPlainTextEdit): def __init__(self, parent, placeholder): super().__init__(parent) self.setPlaceholderText(placeholder) self.setTabStopWidth(28) def loadScriptFile(self, filename): try: with open(filename, 'r', encoding=sys.getdefaultencoding()) as f: code = f.read() except Exception as err: code = 'File Error: {}'.format(err) self.setPlainText(code) def dragEnterEvent(self, event): super().dragEnterEvent(event) if event.mimeData().hasUrls(): event.accept() else: event.ignore() def dropEvent(self, event): super().dropEvent(event) if event.mimeData().hasUrls(): self.loadScriptFile(event.mimeData().text()[8:]) else: event.ignore() def mouseDoubleClickEvent(self, event): super().mouseDoubleClickEvent(event) self.loadScriptFile(QFileDialog.getOpenFileName(self, '选择密码提示文件')[0]) class Console(QTextBrowser): def __init__(self, parent, placeholder): super().__init__(parent) self.setPlaceholderText(placeholder) def enterEvent(self, event): super().enterEvent(event) self.resize(400, 400) def leaveEvent(self, event): super().leaveEvent(event) self.resize(400, 30) class Layout(QWidget): def __init__(self): super().__init__() self.setWindowTitle('在线代码运行器') self.setFixedSize(800, 600) self.setWindowIcon(QApplication.style().standardIcon(QStyle.SP_TitleBarMenuButton)) self.setStyleSheet('font-family: "Microsoft Yahei"; font-size: 14px;') self.button_compile = QPushButton('运 行', self) self.button_compile.setGeometry(QRect(20, 20, 80, 30)) self.button_clear = QPushButton('清 空', self) self.button_clear.setGeometry(QRect(110, 20, 80, 30)) self.combobox = ComboBox(self) self.combobox.setGeometry(QRect(200, 20, 170, 30)) self.editor = Editor(self, '双击加载代码文件或拖动文件到这里……') self.editor.setGeometry(QRect(20, 60, 760, 520)) self.editor.setStyleSheet('font-family: "sans-serif";') self.console = Console(self, '运行结果……') self.console.setGeometry(QRect(380, 20, 400, 30)) class Program(Layout): def __init__(self): super().__init__() self.compiler = Compiler() self.button_compile.clicked.connect(self.execute) self.button_clear.clicked.connect(self.clear) self.combobox.currentIndexChanged.connect(self.select) self.compiler.compiled.connect(self.receive) self.editor.setPlainText(self.combobox.code) def select(self): self.compiler.blocked = True self.editor.setPlainText(self.combobox.code) def execute(self): self.compiler.blocked = True self.compiler.preprocess(self.editor.toPlainText(), self.combobox.language) self.console.setText('程序正在运行中……') def clear(self): self.compiler.blocked = True self.editor.setPlainText('') self.console.setText('') def receive(self, result): self.console.setText(result) if __name__ == '__main__': app = QApplication(sys.argv) program = Program() program.show() sys.exit(app.exec())