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 class User(QLabel): update_signal = pyqtSignal() sync_signal = pyqtSignal() # 自定义信号, 注意信号必须为类属性 # button_clicked_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[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[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): sync = Sync() sync.sync_signal.connect(self.sync_status) sync.run() self.sync_signal.emit() pass def sync_status(self): 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.show()