def assert_text(self): if self.file_name: with open(self.file_name, encoding=get_configs()['default_file_encoding']) as f: if assert_text(self.text.text(), f.read()): self.not_save.emit() else: self.save.emit() else: if assert_text(self.text.text().replace('\r', ''), get_configs()['init_text']): self.not_save.emit() else: self.save.emit()
def __init__(self): QMainWindow.__init__(self) add_diff() self.tray = set_tray_items(self) self.tray.menu.triggered[QAction].connect(self.MenuEvents) # self.assert_activate() self.untitled_number = 0 self.not_save_list = [] self.setWindowTitle(get_configs()['init_title']) self.tip = QStatusBar() self.setStatusBar(self.tip) self.base_tkpy = BaseTkPy3() self.windows_mdi = self.base_tkpy.mdi self.line_count_button = LineCountButton(self.windows_mdi) self.setCentralWidget(self.base_tkpy) self.Menu: QMenuBar = self.menuBar() self.FileMenu = self.Menu.addMenu(_('文件')) self.EditMenu = self.Menu.addMenu(_('编辑')) self.SelectMenu = self.Menu.addMenu(_('选择')) self.ViewMenu = self.Menu.addMenu(_('查看')) self.GoToMenu = self.Menu.addMenu(_('转到')) self.RunMenu = self.Menu.addMenu(_('运行')) self.TerminalMenu = self.Menu.addMenu(_('终端')) self.HelpMenu = self.Menu.addMenu(_('帮助')) # ---------------------------------------- self.FileToolsBar = self.addToolBar(_('文件')) self.RunToolsBar = self.addToolBar(_('运行')) self.HelpToolsBar = self.addToolBar(_('帮助')) self.tip.addPermanentWidget(self.line_count_button) self.get_start()
def save(): sub.setWindowTitle( edit.file_name or get_configs()['new_file_title'] + ' ' + str(sub.number)) if sub.widget().file_name in self.not_save_list: self.not_save_list.remove(sub.widget().file_name) sub.setSave(True)
def not_save(): sub.setWindowTitle( '*' + (edit.file_name or get_configs()['new_file_title'] + ' ' + str(sub.number)) + '*') if sub.widget().file_name not in self.not_save_list: self.not_save_list.append(sub.widget().file_name) sub.setSave(False)
def open(self, file_name: str): with open(file_name, encoding=get_configs()['default_file_encoding']) as f: self.text.setText(f.read()) self.file_name = file_name self.setWindowTitle(self.file_name) self.text.setMarginWidth( 0, len(str(len(self.text.text().split('\n')))) * 20)
def assert_activate_code(self, code: str = ""): if code in get_configs()['activate_codes'] + get_configs( )['permanent_activation_codes']: self.activate_button.setWhatsThis('点击<b>此处</b>激活TkPy3') self.activate_button.setDisabled(False) if code in get_configs()['permanent_activation_codes']: self.permanent_activation = True elif not code.replace('-', ''): self.activate_button.setWhatsThis('请输入激活码') self.activate_button.setDisabled(True) elif len(code) != len('AAAA-AAAA-AAAA-AAAA'): self.activate_button.setWhatsThis('激活码输入位数不对') self.activate_button.setDisabled(True) else: self.activate_button.setWhatsThis('长度合适,请按激活按钮') self.activate_button.setDisabled(True)
def save_file(self): text = self.text_view.toPlainText() file_name, ok = QFileDialog.getSaveFileName(self, '保存', '', 'Html文件 (*.html)') if ok: with open(file_name, 'w', encoding=get_configs()['default_file_encoding']) as f: f.write(text)
def start_transformation(self): if not self.file_name: QMessageBox.information(self, '提示', '还未选择文件。') with open(self.file_name, encoding=get_configs()['default_file_encoding']) as f: text = f.read() html = to_html(text) self.text_view.setPlainText(html) self.html_view.setHtml(html) self.save_button.setDisabled(False)
def save_file(self, file_name: str): try: with open(file_name, 'w', encoding=get_configs()['default_file_encoding']) as f: f.write(self.text.text()) except PermissionError: QMessageBox.critical(self, '错误', '无权利访问文件。', QMessageBox.Ok) else: self.file_name = file_name self.setWindowTitle(self.file_name) self.assert_text()
def __init__(self): QDialog.__init__(self) if not get_configs()['activate_codes']: random_activation_codes() self.setWindowTitle('激活TkPy3') self.permanent_activation = False self.layout = QGridLayout() self.view = QStackedWidget() self.activate = QWidget() self.evaluate = QWidget() self.get_activate_code = QPushButton('没有激活码?获取它!') self.activate_button = QPushButton() self.init_ui()
def assert_activate(self, reactivate=False): if not get_configs()['is_activate'] or reactivate: permanent_activation = self.open_activate_window() if not get_configs()['is_activate']: QMessageBox.critical(self, _('错误'), _('TkPy3未激活,即将退出TkPy3。')) sys.exit() else: add_config('is_activate', True) if not permanent_activation: add_config( 'end_activate_day', datetime.date.today() + datetime.timedelta(days=random.randint(5, 40))) else: add_config('end_activate_day', True) elif isinstance(get_configs()['end_activate_day'], bool): add_config('is_activate', True) elif get_configs()['end_activate_day'] > datetime.date.today(): add_config('is_activate', False) self.assert_activate() random_activation_codes()
def main(): if get_configs()['test_mode']: BASE_DIR_DIRNAME = os.path.dirname(BASE_DIR) sys.path.append(BASE_DIR_DIRNAME) server = HelpServer() server.start() app = QApplication(sys.argv) tkpy3_setup(app) widget = MainWindow() widget.show() app.setQuitOnLastWindowClosed(False) return_code = app.exec_() server.terminate() return return_code
def start_activate_code_game(self): max_score = random.randint(20, 40) res = QMessageBox.question( self, '如何获取激活码', f'获取激活码规则:\n 玩飞船大战游戏,分数达到{max_score}分时即可获取激活码。') if res == QMessageBox.No: return self.setDisabled(True) score = run_activate_game() self.setDisabled(False) if score >= max_score: code = random.choice(get_configs()['activate_codes']) time.sleep(1) QMessageBox.information(self, '提示', f'激活码获取成功,激活码是{code},将自动为您将激活码复制到剪贴板。') clipboard = QApplication.clipboard() clipboard.clear() clipboard.setText(code)
def add_editor_window(self, event=TkPyEventType()): if event.text() == 'TkPy3 Event type': file_name = "" self.untitled_number += 1 else: file_name = event.text() def not_save(): sub.setWindowTitle( '*' + (edit.file_name or get_configs()['new_file_title'] + ' ' + str(sub.number)) + '*') if sub.widget().file_name not in self.not_save_list: self.not_save_list.append(sub.widget().file_name) sub.setSave(False) def save(): sub.setWindowTitle( edit.file_name or get_configs()['new_file_title'] + ' ' + str(sub.number)) if sub.widget().file_name in self.not_save_list: self.not_save_list.remove(sub.widget().file_name) sub.setSave(True) def remove(): save() self.windows_mdi.removeSubWindow(sub) sub = EditSubWindow() subMenu = sub.systemMenu() self.addSubMenu(subMenu) sub.setWindowState(Qt.WindowMaximized) sub.setNumber(self.untitled_number) sub.resize(700, 500) sub.setWindowTitle( get_configs()['new_file_title'] + ' ' + str(sub.number) if not file_name else os.path.abspath(file_name)) sub.setWindowIcon(QIcon(pixmaps["python_file"])) edit = BaseEditor() if file_name: edit.open(file_name) sub.setWidget(edit) edit.not_save.connect(not_save) edit.save.connect(save) self.windows_mdi.addSubWindow(sub) sub.close_remove.connect(remove) sub.show()
def set_style(app: QApplication): return app.setStyle(QStyleFactory.create(get_configs()['window_style']))
def get_pygments_stylemap(): pygments_stylemap = list(STYLE_MAP.keys()) pygments_stylemap.remove(get_configs()['highlight_style']) pygments_stylemap.insert(0, get_configs()['highlight_style']) return pygments_stylemap
def get_start(self): self.text.setFont(QFont(get_configs()['font_name'])) self.edit_frame.addWidget(self.text) self.text.setText(get_configs()['init_text']) self.setLayout(self.edit_frame) self.text.key_pressed.connect(self.assert_text)
chars = list('QWERTYUIOPASDFGHJKLZCVBNM') for i in range(4): for i in range(4): code += random.choice(chars) code += '-' return code[0:-1] def random_activation_codes(): codes = [] for i in range(5): codes.append(get_one_activate_code()) add_config('activate_codes', codes) activation_codes = get_configs()['activate_codes'] if activation_codes: return_activation_code = random.choice(activation_codes) if not pygame.image.get_extended(): raise SystemExit("Sorry, extended image module required") # game constants MAX_SHOTS = 2 # most player bullets onscreen ALIEN_ODDS = 22 # chances a new alien appears BOMB_ODDS = 60 # chances a new bomb will drop ALIEN_RELOAD = 12 # frames between new aliens SCREENRECT = Rect(0, 0, 640, 480) SCORE = 0 main_dir = os.path.join(BASE_DIR, 'images', 'game_images')