from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import * from PyQt5.QtWidgets import * import configparser from utils.BasicUtils import * from utils.CreateConfigure import CreateConfigure from utils.Sync import Sync from view.LoginWidget import LoginWidget from view.SettingWidget import SettingWidget from view.Tip_UI import TipUi class User(QLabel): update_signal = pyqtSignal() sync_signal = pyqtSignal() def __init__(self): super(User, self).__init__() self.widget = QWidget(self) self.widget.setMaximumWidth(300) self.setObjectName('User') # todo:修改布局使适合微软todo的样式,设置点击事件,使用右键菜单的样式添加设置、同步、退出,暂时就这样 layout = QHBoxLayout() info_layout = QVBoxLayout() self.pic_label = QLabel('') self.pic_label.setObjectName('pic_label') self.pic_label.setPixmap( QPixmap(os.path.abspath('../') + '/images/user.svg').scaled(50, 50, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)) layout.addWidget(self.pic_label, 2) self.user_name = QLabel("本地账号") self.user_name.setObjectName('user_name') self.user_mail = QLabel('未同步') self.user_mail.setStyleSheet('font-size:14px') self.widget.setLayout(layout) # 设置右键菜单 self.context_menu = QMenu(self) info_layout.addWidget(self.user_name) info_layout.addWidget(self.user_mail) layout.addLayout(info_layout, 4) layout.addStretch(1) self.update_signal.connect(self.iniUI) self.iniUI() def iniUI(self): self.context_menu.clear() # 读取文件内容 account = read_init_file() if account and account[0] != 'None': self.user_name.setText(account[1]) self.user_mail.setText(account[3]) else: self.user_name.setText("本地账号") self.user_mail.setText('未同步') # self.user_mail.setObjectName('user_mail') # 背景透明 self.context_menu.setAttribute(Qt.WA_TranslucentBackground) # 无边框、去掉自带阴影 self.context_menu.setWindowFlags( self.context_menu.windowFlags() | Qt.FramelessWindowHint | Qt.NoDropShadowWindowHint) self.context_menu.addAction(QIcon(os.getcwd() + '/../images/setting.svg'), '设置', self.setting) self.context_menu.addAction(QIcon(os.getcwd() + '/../images/sync.svg'), '同步', self.sync) if account and account[0] != 'None': self.context_menu.addAction(QIcon(os.getcwd() + '/../images/exit.svg'), '登出', self.exit_account) else: self.context_menu.addAction(QIcon(os.getcwd() + '/../images/login.svg'), '登录', self.login_account) def contextMenuEvent(self, event): self.context_menu.exec_(event.globalPos()) # todo 设置右键点击事件 def setting(self): self.setting_widget = SettingWidget() self.setting_widget.show() def sync(self): account = read_init_file() if account and account[0] != 'None': self.sync_action = Sync() TipUi.show_tip('同步中。。。') self.sync_action.sync_signal.connect(self.sync_status) self.sync_action.start() else: self.login_account() pass def sync_status(self): TipUi.show_tip('同步成功!') self.sync_signal.emit() print('Success!') def exit_account(self): config_path = return_work_dir() + 'PyQtToDoList.ini' # print(config_path) try: if os.path.exists(config_path): os.remove(config_path) CreateConfigure() except Exception as e: print(e) self.update_signal.emit() pass def login_account(self): self.login_window = LoginWidget() self.login_window.login_signal.connect(self.iniUI) self.login_window.show()