class BankWindow(QObject): get_loan = Signal(int) def __init__(self, ui_file, parent=None): super(BankWindow, self).__init__(parent) self.window = QUiLoader().load(ui_file) self.extract_buttons() self.connect_signals() self.window.hide() def extract_buttons(self): self.interest_list = self.window.findChild(QListWidget, 'interest_list') self.back_button = self.window.findChild(QPushButton, 'back_button') self.loan_100_button = self.window.findChild(QPushButton, 'loan_100_button') self.loan_30_button = self.window.findChild(QPushButton, 'loan_30_button') self.loan_10_button = self.window.findChild(QPushButton, 'loan_10_button') def connect_signals(self): self.back_button.clicked.connect(self.close_window) self.loan_100_button.clicked.connect(self.loan_100) self.loan_30_button.clicked.connect(self.loan_30) self.loan_10_button.clicked.connect(self.loan_10) def open_window(self): self.window.show() def close_window(self): self.window.hide() def set_loan_amount(self, maxLoanAmount, loanInterest): self.interest_list.clear() self.interest_list.addItem( str("Max Loan Amount: ") + str(maxLoanAmount)) self.interest_list.addItem(str("Loan Interest: ") + str(loanInterest)) def loan_100(self): self.get_loan.emit(1.0) self.window.hide() def loan_30(self): self.get_loan.emit(0.3) self.window.hide() def loan_10(self): self.get_loan.emit(0.1) self.window.hide()
class MainScreen(QObject): submit_id = Signal(str) open_story = Signal() def __init__(self, ui_file, parent=None): super(MainScreen, self).__init__(parent) self.window = QUiLoader().load(ui_file) self.extract_items() self.connect_signals() self.inStory = False image = QPixmap("images/main.jpg") self.base_image.setPixmap(image) self.window.show() def extract_items(self): self.submit_button = self.window.findChild(QPushButton, "submit_button") self.input_line = self.window.findChild(QLineEdit, "input_line") self.base_image = self.window.findChild(QLabel, "base_image") def connect_signals(self): self.submit_button.clicked.connect(self.submit_id_number) self.submit_button.clicked.connect(self.input_line.clear) def open_window(self): self.window.show() def close_window(self): self.window.hide() @Slot() def set_story_false(self): self.inStory = False self.window.show() def submit_id_number(self): if self.inStory: return id = self.input_line.text() self.submit_id.emit(id) self.open_story.emit() self.inStory = True self.window.hide()
class StoryScreen(QObject): story_finish = Signal() def __init__(self, ui_file, parent=None): super(StoryScreen, self).__init__(parent) self.window = QUiLoader().load(ui_file) self.extract_items() self.connect_signals() self.scene = 0 self.storyText = [] self.storyBegin = False image = QPixmap("images/cern_color.jpg") self.bottom_image.setPixmap(image) self.window.hide() def extract_items(self): self.next_button = self.window.findChild(QPushButton, "next_button") self.story_box = self.window.findChild(QTextBrowser, "story_box") self.story_image = self.window.findChild(QLabel, "story_image") self.bottom_image = self.window.findChild(QLabel, "bottom_image") def connect_signals(self): self.next_button.clicked.connect(self.go_next_screen) @Slot() def open_window(self): self.window.show() @Slot() def close_window(self): self.window.hide() def set_story_start(self): self.storyBegin = True self.scene += 1 self.update_screen() def go_next_screen(self): if not self.storyBegin: return if self.scene == 6: self.window.hide() self.scene = 0 self.update_screen() self.storyBegin = False self.story_box.clear() self.story_finish.emit() else: self.scene += 1 self.update_screen() def update_screen(self): self.story_box.setText(self.storyText[self.scene]) image = QPixmap("images/image_10{}.jpg".format(self.scene)) self.story_image.setPixmap(image)
class CryptoWindow(QObject): buy_crypto = Signal(int) sell_crypto = Signal(int) def __init__(self, ui_file, parent=None): super(CryptoWindow, self).__init__(parent) self.window = QUiLoader().load(ui_file) self.extract_buttons() self.connect_signals() self.window.hide() def extract_buttons(self): self.back_button = self.window.findChild(QPushButton, 'back_button') self.buy_button_1 = self.window.findChild(QPushButton, 'buy_button_1') self.buy_button_2 = self.window.findChild(QPushButton, 'buy_button_2') self.buy_button_3 = self.window.findChild(QPushButton, 'buy_button_3') self.buy_button_4 = self.window.findChild(QPushButton, 'buy_button_4') self.buy_button_5 = self.window.findChild(QPushButton, 'buy_button_5') self.buy_button_6 = self.window.findChild(QPushButton, 'buy_button_6') self.sell_button_1 = self.window.findChild(QPushButton, 'sell_button_1') self.sell_button_2 = self.window.findChild(QPushButton, 'sell_button_2') self.sell_button_3 = self.window.findChild(QPushButton, 'sell_button_3') self.sell_button_4 = self.window.findChild(QPushButton, 'sell_button_4') self.sell_button_5 = self.window.findChild(QPushButton, 'sell_button_5') self.sell_button_6 = self.window.findChild(QPushButton, 'sell_button_6') def connect_signals(self): self.back_button.clicked.connect(self.close_window) self.buy_button_1.clicked.connect(self.buy_crypto_1) self.buy_button_2.clicked.connect(self.buy_crypto_2) self.buy_button_3.clicked.connect(self.buy_crypto_3) self.buy_button_4.clicked.connect(self.buy_crypto_4) self.buy_button_5.clicked.connect(self.buy_crypto_5) self.buy_button_6.clicked.connect(self.buy_crypto_6) self.sell_button_1.clicked.connect(self.sell_crypto_1) self.sell_button_2.clicked.connect(self.sell_crypto_2) self.sell_button_3.clicked.connect(self.sell_crypto_3) self.sell_button_4.clicked.connect(self.sell_crypto_4) self.sell_button_5.clicked.connect(self.sell_crypto_5) self.sell_button_6.clicked.connect(self.sell_crypto_6) def open_window(self): self.window.show() def close_window(self): self.window.hide() def buy_crypto_1(self): self.buy_crypto.emit(1) self.window.hide() def buy_crypto_2(self): self.buy_crypto.emit(2) self.window.hide() def buy_crypto_3(self): self.buy_crypto.emit(3) self.window.hide() def buy_crypto_4(self): self.buy_crypto.emit(4) self.window.hide() def buy_crypto_5(self): self.buy_crypto.emit(5) self.window.hide() def buy_crypto_6(self): self.buy_crypto.emit(6) self.window.hide() def sell_crypto_1(self): self.sell_crypto.emit(1) self.window.hide() def sell_crypto_2(self): self.sell_crypto.emit(2) self.window.hide() def sell_crypto_3(self): self.sell_crypto.emit(3) self.window.hide() def sell_crypto_4(self): self.sell_crypto.emit(4) self.window.hide() def sell_crypto_5(self): self.sell_crypto.emit(5) self.window.hide() def sell_crypto_6(self): self.sell_crypto.emit(6) self.window.hide()
class MainWindow(QObject): open_crypto = Signal() open_property = Signal() open_investment = Signal() open_bank = Signal() living_expenses = Signal(int) card_repay = Signal(int) end_turn_signal = Signal() def __init__(self, ui_file, parent=None): super(MainWindow, self).__init__(parent) self.window = QUiLoader().load(ui_file) self.extract_buttons() self.connect_signals() self.window.show() self.fee_payment_list = self.window.findChild(QListWidget, 'fee_payment') def extract_buttons(self): self.bank_button = self.window.findChild(QPushButton, 'BankButton') self.crypto_button = self.window.findChild(QPushButton, 'CryptoButton') self.property_button = self.window.findChild(QPushButton, 'PropertyButton') self.investment_button = self.window.findChild(QPushButton, 'InvestmentButton') self.end_turn_button = self.window.findChild(QPushButton, 'end_turn') self.living_card_button = self.window.findChild( QPushButton, 'living_card') self.living_savings_button = self.window.findChild( QPushButton, 'living_savings') self.card_repay_button = self.window.findChild(QPushButton, 'card_repay') self.card_notrepay_button = self.window.findChild( QPushButton, 'card_notrepay') def connect_signals(self): self.bank_button.clicked.connect(self.open_bank_window) self.crypto_button.clicked.connect(self.open_crypto_window) self.property_button.clicked.connect(self.open_property_window) self.investment_button.clicked.connect(self.open_investment_window) self.living_card_button.clicked.connect(self.living_expenses_card) self.living_savings_button.clicked.connect( self.living_expenses_savings) self.card_repay_button.clicked.connect(self.credit_card_repay) self.card_notrepay_button.clicked.connect(self.credit_card_notrepay) self.end_turn_button.clicked.connect(self.end_turn) def open_window(self): self.window.show() def close_window(self): self.window.hide() def open_bank_window(self): self.open_bank.emit() def open_crypto_window(self): self.open_crypto.emit() def open_property_window(self): self.open_property.emit() def open_investment_window(self): self.open_investment.emit() def living_expenses_card(self): self.living_expenses.emit(1) def living_expenses_savings(self): self.living_expenses.emit(2) def credit_card_repay(self): self.card_repay.emit(1) def credit_card_notrepay(self): self.card_repay.emit(2) def display_fee_payment(self, payment): self.fee_payment_list.addItem(payment) def end_turn(self): self.end_turn_signal.emit()
class InvestmentWindow(QObject): make_investment = Signal(int) def __init__(self, ui_file, parent=None): super(InvestmentWindow, self).__init__(parent) self.window = QUiLoader().load(ui_file) self.extract_buttons() self.connect_signals() self.window.hide() def extract_buttons(self): self.back_button = self.window.findChild(QPushButton, 'back_button') self.stock_low_button = self.window.findChild(QPushButton, 'stock_low_button') self.stock_avg_button = self.window.findChild(QPushButton, 'stock_avg_button') self.stock_high_button = self.window.findChild(QPushButton, 'stock_high_button') self.fixed_3_button = self.window.findChild(QPushButton, 'fixed_3_button') self.fixed_6_button = self.window.findChild(QPushButton, 'fixed_6_button') self.fixed_12_button = self.window.findChild(QPushButton, 'fixed_12_button') def connect_signals(self): self.back_button.clicked.connect(self.close_window) self.stock_low_button.clicked.connect(self.buy_stock_low) self.stock_avg_button.clicked.connect(self.buy_stock_avg) self.stock_high_button.clicked.connect(self.buy_stock_high) self.fixed_3_button.clicked.connect(self.buy_fixed_3) self.fixed_6_button.clicked.connect(self.buy_fixed_6) self.fixed_12_button.clicked.connect(self.buy_fixed_12) def open_window(self): self.window.show() def close_window(self): self.window.hide() def buy_stock_low(self): self.make_investment.emit(1) self.window.hide() def buy_stock_avg(self): self.make_investment.emit(2) self.window.hide() def buy_stock_high(self): self.make_investment.emit(3) self.window.hide() def buy_fixed_3(self): self.make_investment.emit(4) self.window.hide() def buy_fixed_6(self): self.make_investment.emit(5) self.window.hide() def buy_fixed_12(self): self.make_investment.emit(6) self.window.hide()
class PropertyWindow(QObject): buy_property = Signal(int) def __init__(self, ui_file, parent=None): super(PropertyWindow, self).__init__(parent) self.window = QUiLoader().load(ui_file) self.extract_buttons() self.connect_signals() self.window.hide() def extract_buttons(self): self.back_button = self.window.findChild(QPushButton, 'back_button') self.estate_apartment_button = self.window.findChild( QPushButton, 'estate_apartment_button') self.estate_house_button = self.window.findChild( QPushButton, 'estate_house_button') self.estate_penthouse_button = self.window.findChild( QPushButton, 'estate_penthouse_button') self.vehicle_economy_button = self.window.findChild( QPushButton, 'vehicle_economy_button') self.vehicle_middle_button = self.window.findChild( QPushButton, 'vehicle_middle_button') self.vehicle_luxury_button = self.window.findChild( QPushButton, 'vehicle_luxury_button') def connect_signals(self): self.back_button.clicked.connect(self.close_window) self.estate_apartment_button.clicked.connect(self.buy_estate_apartment) self.estate_house_button.clicked.connect(self.buy_estate_house) self.estate_penthouse_button.clicked.connect(self.buy_estate_penthouse) self.vehicle_economy_button.clicked.connect(self.buy_vehicle_economy) self.vehicle_middle_button.clicked.connect(self.buy_vehicle_middle) self.vehicle_luxury_button.clicked.connect(self.buy_vehicle_luxury) def open_window(self): self.window.show() def close_window(self): self.window.hide() def buy_estate_apartment(self): self.buy_property.emit(1) self.window.hide() def buy_estate_house(self): self.buy_property.emit(2) self.window.hide() def buy_estate_penthouse(self): self.buy_property.emit(3) self.window.hide() def buy_vehicle_economy(self): self.buy_property.emit(4) self.window.hide() def buy_vehicle_middle(self): self.buy_property.emit(5) self.window.hide() def buy_vehicle_luxury(self): self.buy_property.emit(6) self.window.hide()
class UI: """ WSL2 端口自动转发 """ def __init__(self, qt_application=None): self.qt_application = qt_application # 实例化配置管理类 self.settings_manage = SettingsManage() self.__setting = self.settings_manage.get() # 实例化windows命令处理类 self.wsl2 = WinCmd() # 初始化启动脚本 if not isfile(self.wsl2.WSL_VBS_PATH): copyfile(self.wsl2.WSL_VBS_PATH_TEMP, self.wsl2.WSL_VBS_PATH) if not isfile(self.wsl2.WSL_BAT_PATH): self.settings_manage.save_file_content( self.wsl2.WSL_BAT_PATH, self.__setting.get('wsl_bat_content', '')) # 加载UI文件 self.ui = QUiLoader().load(ResourcePath.resource_path('lib/wsl2.ui')) # 设置界面图标 app_icon = QIcon(ResourcePath.resource_path("lib/logo.ico")) self.ui.setWindowIcon(app_icon) # 设置选中状态 self.ui.auto_start_wsl.setChecked( self.__setting.get('auto_start_wsl', False)) self.ui.fire_wall_open.setChecked( self.__setting.get('fire_wall_open', False)) self.ui.fire_wall_close.setChecked( self.__setting.get('fire_wall_close', False)) # 设置文本框的值 self.ui.port_text.appendPlainText('\n'.join( self.__setting.get('ports', []))) self.ui.bat_text.appendPlainText(self.wsl2.get_bat_script()) # 按钮监听 self.ui.get_wsl2_ip.clicked.connect(self.__get_wsl2_ip) self.ui.port_add.clicked.connect(self.__port_add) self.ui.port_del.clicked.connect(self.__port_del) self.ui.port_info.clicked.connect(self.__port_info) self.ui.wsl_l_v.clicked.connect(self.__wsl_l_v) self.ui.port_reset.clicked.connect(self.__port_reset) self.ui.end_wsl.clicked.connect(self.__end_wsl) self.ui.start_wsl.clicked.connect(self.__start_wsl) self.ui.start_wsl_all.clicked.connect(self.start_wsl_all) self.ui.save_settings.clicked.connect(self.__save_settings) self.ui.save_settings_ports.clicked.connect(self.__save_settings) # 设置系统托盘图标的菜单 tp_icon = QIcon(ResourcePath.resource_path("lib/logo.ico")) self.tp = QSystemTrayIcon(self.ui) self.tp.setIcon(tp_icon) self.ui_hide = QAction(icon=tp_icon, text='隐藏(Hide)', triggered=self.ui.hide) self.ui_show = QAction(icon=tp_icon, text='显示(Show)', triggered=self.ui.show) self.ui_exit = QAction(icon=tp_icon, text='退出(Exit)', triggered=self.__quit_app) self.tp_menu = QMenu() self.tp_menu.addAction(self.ui_hide) self.tp_menu.addAction(self.ui_show) self.tp_menu.addAction(self.ui_exit) self.tp.setContextMenu(self.tp_menu) self.tp.activated.connect(self.__tp_connect_action) self.tp.show() self.tp.showMessage('WSL2AutoPortForward', 'WSL2端口自动转发工具已启动', QSystemTrayIcon.MessageIcon.Information) def __tp_connect_action(self, activation_reason): """ 监听托盘图标点击 :param activation_reason: 点击类型 :return: """ if activation_reason == QSystemTrayIcon.ActivationReason.Trigger: # 左单击 if self.ui.isHidden(): self.ui.show() else: self.ui.hide() elif activation_reason == QSystemTrayIcon.ActivationReason.Context: # 右单击 self.tp_menu.show() elif activation_reason == QSystemTrayIcon.ActivationReason.DoubleClick: # 双击 self.ui.show() def __quit_app(self): """ 退出APP :return: """ re = QMessageBox.question(self.ui, "提示", "退出系统", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if re == QMessageBox.Yes: # 关闭窗体程序 self.qt_application.quit() # 在应用程序全部关闭后,TrayIcon其实还不会自动消失, # 直到你的鼠标移动到上面去后,才会消失, # 这是个问题,(如同你terminate一些带TrayIcon的应用程序时出现的状况), # 这种问题的解决我是通过在程序退出前将其setVisible(False)来完成的。 self.tp.setVisible(False) def __wsl_l_v(self): """ 获取wsl信息 :return: """ wsl_l_v_txt = ' ' + self.wsl2.wsl_l_v(exec_run=True).replace( '\x00', '').strip() if not wsl_l_v_txt: # 未查询到wsl信息提示 wsl_l_v_txt = '未查询到wsl信息!' QMessageBox.information(self.ui, '系统提示', wsl_l_v_txt) self.ui.wsl_l_v_text.setPlainText(wsl_l_v_txt) def __get_wsl2_ip(self): wsl2_ip_info = self.wsl2.get_wsl2_ip() if not wsl2_ip_info: # 未查询到端口转发信息提示 QMessageBox.information(self.ui, '系统提示', '未查询到IP信息!') else: wsl2_ip_info = 'WSL2当前IP为:' + wsl2_ip_info self.ui.wsl_l_v_text.setPlainText(wsl2_ip_info) def __port_add(self): wsl2_ip_info = self.wsl2.get_wsl2_ip() if not wsl2_ip_info: # 未查询到端口转发信息提示 QMessageBox.information(self.ui, '系统提示', '未查询到IP信息!') else: self.ui.result_text.clear() ports = self.ui.port_text.toPlainText() port_str = '' for port in ports.splitlines(): if not port.strip(): continue self.__port_add_one(port, wsl2_ip_info) port_str += (',' + port if port_str else port) self.__fire_wall_rule_add(port_str) self.ui.result_text.appendPlainText('Succeed!') def __port_del(self, del_port=True, del_fire=True): self.ui.result_text.clear() ports = self.ui.port_text.toPlainText() if del_port: for port in ports.splitlines(): if not port.strip(): continue self.__port_del_one(port) if del_fire: self.__fire_wall_rule_del() self.ui.result_text.appendPlainText('Succeed!') def __port_reset(self): port_info = self.wsl2.port_info() self.ui.result_text.clear() for port in port_info: self.__port_del_one(port['port']) self.__fire_wall_rule_del() self.ui.result_text.appendPlainText('Succeed!') def __port_info(self): """ 获取端口转发信息 :return: """ info_str = self.wsl2.port_info(True).strip() if not info_str: # 未查询到端口转发信息提示 info_str = '未查询到端口转发信息!' QMessageBox.information(self.ui, '系统提示', info_str) self.ui.result_text.setPlainText(info_str) def __wsl2_auto_port_forward(self): """ 一键自动转发 @return: """ self.__port_del(del_port=False, del_fire=True) self.__port_add() def __end_wsl(self): """ 停止wsl :return: """ self.start_qt_process(self.wsl2.end_wsl(exec_run=False)) info_str = 'wsl 已全部停止' QMessageBox.information(self.ui, '系统提示', info_str) def __start_wsl(self): """ 启动wsl :return: """ self.start_qt_process(self.wsl2.start_wsl(exec_run=False)) def start_wsl_all(self): """ 启动wsl并转发端口 :return: """ self.__start_wsl() self.__wsl2_auto_port_forward() def __save_settings(self): """ 保存全部配置 :return: """ # 保存脚本 self.__save_bat_script() # 保存配置信息 self.settings_manage.set('fire_wall_open', self.ui.fire_wall_open.isChecked()) self.settings_manage.set('fire_wall_close', self.ui.fire_wall_close.isChecked()) self.settings_manage.set('auto_start_wsl', self.ui.auto_start_wsl.isChecked()) self.settings_manage.set('ports', self.ui.port_text.toPlainText().splitlines()) # 保存成功提示 QMessageBox.information(self.ui, '系统提示', '配置保存成功!') def __save_bat_script(self): """ 保存启动脚本 :return: """ content = self.ui.bat_text.toPlainText() self.settings_manage.set('wsl_bat_content', content) self.wsl2.save_bat_script(content) def __fire_wall_rule_add(self, port): """ 添加防火墙 :param port: 端口号,多个端口逗号隔开 :return: """ if self.ui.fire_wall_open.isChecked(): self.start_qt_process( self.wsl2.fire_wall_rule_add( wsl_port=port, wall_type=self.wsl2.FireWallRuleIn, exec_run=False)) self.ui.result_text.appendPlainText('>>> 添加防火墙:【' + self.wsl2.FireWallRuleIn + '】...') self.start_qt_process( self.wsl2.fire_wall_rule_add( wsl_port=port, wall_type=self.wsl2.FireWallRuleOut, exec_run=False)) self.ui.result_text.appendPlainText('>>> 添加防火墙:【' + self.wsl2.FireWallRuleOut + '】...') def __fire_wall_rule_del(self): """ 删除防火墙 :return: """ if self.ui.fire_wall_close.isChecked(): self.start_qt_process( self.wsl2.fire_wall_rule_del( wall_type=self.wsl2.FireWallRuleIn, exec_run=False)) self.ui.result_text.appendPlainText('>>> 删除防火墙:【' + self.wsl2.FireWallRuleIn + '】...') self.start_qt_process( self.wsl2.fire_wall_rule_del( wall_type=self.wsl2.FireWallRuleOut, exec_run=False)) self.ui.result_text.appendPlainText('>>> 删除防火墙:【' + self.wsl2.FireWallRuleOut + '】...') def __port_add_one(self, port, wsl2_ip_info): """ 添加单个端口 :param port: 端口号 :param wsl2_ip_info: 转发的IP :return: """ self.start_qt_process( self.wsl2.port_add(wsl_ip=wsl2_ip_info, wsl_port=port, exec_run=False)) self.ui.result_text.appendPlainText('>>> 添加端口:【' + port + '】...') def __port_del_one(self, port): """ 删除单个端口 :param port: 端口号 :return: """ self.start_qt_process(self.wsl2.port_del(wsl_port=port, exec_run=False)) self.ui.result_text.appendPlainText('>>> 删除端口:【' + port + '】...') def start_qt_process(self, cmd): """ 启动子进程执行耗时命令 :param cmd: :return: """ process = QProcess(self.ui) process.start(cmd) result = process.waitForStarted() return result