清風 发表于 2024-2-10 10:41:04

请问有现成的用户登录界面吗?

请问有现成的用户登录界面吗?(pyside6版)
1.要求用户输入帐号密码(首次使用需注册);
2、要求能够使用手机短信验证码找回密码;
3、登录后显示一个界面,具体要求待我考虑一下{:5_109:}

FishC 发表于 2024-2-10 10:41:19

对于这样的用户登录界面,你可以使用PySide6库来创建。以下是一个基本的示例代码,满足你的要求:

import sys
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton

class LoginDialog(QDialog):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("用户登录")
      
      layout = QVBoxLayout()
      
      account_label = QLabel("帐号:")
      self.account_edit = QLineEdit()
      layout.addWidget(account_label)
      layout.addWidget(self.account_edit)
      
      password_label = QLabel("密码:")
      self.password_edit = QLineEdit()
      self.password_edit.setEchoMode(QLineEdit.Password)
      layout.addWidget(password_label)
      layout.addWidget(self.password_edit)
      
      login_button = QPushButton("登录")
      login_button.clicked.connect(self.login)
      layout.addWidget(login_button)
      
      self.setLayout(layout)
   
    def login(self):
      account = self.account_edit.text()
      password = self.password_edit.text()
      
      # 在这里实现验证逻辑,验证帐号密码是否正确
      
      if account == "admin" and password == "123456":
            self.accept()
      else:
            print("用户名或密码错误!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    dialog = LoginDialog()
    if dialog.exec() == QDialog.Accepted:
      print("登录成功!")
      # 这里可以添加打开登录后的界面的逻辑
    else:
      print("登录失败!")
   
    sys.exit(app.exec())

该示例中,我们创建了一个继承自QDialog的LoginDialog类,用于展示登录界面。界面包括帐号、密码输入框和登录按钮。当点击登录按钮时,会获取输入的帐号密码并进行验证。如果验证通过,则调用accept()方法来关闭对话框,并打印登录成功的消息;否则,打印登录失败的消息。

你可以根据需要在登录成功后添加打开登录后界面的逻辑。希望这个示例能满足你的需求,并帮助你实现用户登录界面。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-10 10:51:26

本帖最后由 清風 于 2024-2-10 11:21 编辑

123

FishC 发表于 2024-2-10 10:51:46

清風 发表于 2024-02-10 10:51
能不能把界面做漂亮些?另外加入判断并显示计数,如 ...

当然可以!你可以使用PySide6的QSS(Qt样式表)来美化界面,同时添加计数逻辑进行判断。下面是更新后的示例代码:

import sys
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox

class LoginDialog(QDialog):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("用户登录")
      
      layout = QVBoxLayout()
      
      account_label = QLabel("帐号:")
      self.account_edit = QLineEdit()
      layout.addWidget(account_label)
      layout.addWidget(self.account_edit)
      
      password_label = QLabel("密码:")
      self.password_edit = QLineEdit()
      self.password_edit.setEchoMode(QLineEdit.Password)
      layout.addWidget(password_label)
      layout.addWidget(self.password_edit)
      
      login_button = QPushButton("登录")
      login_button.clicked.connect(self.login)
      layout.addWidget(login_button)
      
      self.setLayout(layout)
      
      self.login_attempt = 0

    def login(self):
      self.login_attempt += 1
      
      account = self.account_edit.text()
      password = self.password_edit.text()
      
      # 在这里实现验证逻辑,验证帐号密码是否正确
      if account == "admin" and password == "123456":
            self.accept()
      else:
            QMessageBox.warning(self, "登录失败", "用户名或密码错误!")
            
            if self.login_attempt >= 3:
                sys.exit(app.quit())

if __name__ == "__main__":
    app = QApplication(sys.argv)

    # 设置全局样式
    app.setStyleSheet("""
      QDialog {{
            background-color: #f0f0f0;
      }}
      
      QLabel {{
            font-size: 16px;
            color: #333333;
      }}
      
      QLineEdit {{
            height: 22px;
            border: 1px solid #cccccc;
            border-radius: 3px;
      }}
      
      QPushButton {{
            height: 30px;
            background-color: #4caf50;
            color: white;
            border: none;
            border-radius: 5px;
      }}
      
      QPushButton:hover {{
            background-color: #45a049;
      }}
    """)

    dialog = LoginDialog()
   
    if dialog.exec() == QDialog.Accepted:
      print("登录成功!")
      # 这里可以添加打开登录后的界面的逻辑
    else:
      print("登录失败!")
   
    sys.exit(app.exec())

在这个更新后的示例中,我们使用QMessageBox来显示登录失败的警告消息,并且添加了`self.login_attempt`计数属性来判断是否达到登录次数上限。如果登录次数超过3次,则调用`sys.exit(app.quit())`来退出应用程序。

另外,通过设置全局样式(QSS),我们可以自定义界面的外观。在上面的示例中,我为窗口背景、标签、文本输入框和按钮等元素设置了一些基本的样式。你可以根据自己的需求继续进行美化和定制。

希望这个更新后的示例能够满足你的要求,并帮助你实现一个漂亮的用户登录界面!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-10 11:12:35

本帖最后由 清風 于 2024-2-10 11:22 编辑

123

FishC 发表于 2024-2-10 11:13:02

清風 发表于 2024-02-10 11:12
问题来了:

当用户登录成功以后:

要求:
1、 ...

下面是一个实现你所描述功能的示例代码:

import sys
import os
import xlrd
import xlwt
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QComboBox, QPushButton, QMessageBox, QFileDialog

class MainDialog(QDialog):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("功能选择")

      layout = QVBoxLayout()

      folder_label = QLabel("请选择文件夹:")
      self.folder_combo = QComboBox()
      self.folder_combo.currentIndexChanged.connect(self.load_files)
      layout.addWidget(folder_label)
      layout.addWidget(self.folder_combo)

      process_button = QPushButton("开始处理")
      process_button.clicked.connect(self.process_files)
      layout.addWidget(process_button)

      self.setLayout(layout)

      self.folder_combo.addItem("--- 请选择 ---")
      self.base_workbook = None

    def load_files(self, index):
      if index == 0:
            return

      folder_path = self.folder_combo.currentText()

      files = []
      for file in os.listdir(folder_path):
            if file.endswith(".xls"):
                files.append(file)

      self.base_workbook = None

      if files:
            self.folder_combo.setEnabled(False)
            self.base_workbook = None

            for file in files:
                self.folder_combo.addItem(file)

    def process_files(self):
      if not self.base_workbook:
            QMessageBox.warning(self, "错误", "请先选择基础工作簿!")
            return

      folder_path = self.folder_combo.currentText()

      count = 0

      for file in os.listdir(folder_path):
            if file.endswith(".xls") and file != self.base_workbook:
                workbook_path = os.path.join(folder_path, file)

                try:
                  base_wb = xlrd.open_workbook(self.base_workbook, formatting_info=True)
                  wb = xlrd.open_workbook(workbook_path, formatting_info=True)

                  base_ws = base_wb.sheet_by_index(0)
                  ws = wb.sheet_by_index(0)

                  for row in range(0, ws.nrows):
                        for col in range(0, ws.ncols):
                            cell_value = ws.cell_value(row, col)
                            base_ws.write(row, col, cell_value)

                  count += 1

                  new_workbook_path = os.path.join(folder_path, "123.xls")

                  with open(new_workbook_path, "w") as f:
                        base_wb.save(f)

                except Exception as e:
                  print(f"处理工作簿 {file} 出错:{str(e)}")

      QMessageBox.information(self, "提示", f"累加成功的工作簿数目:{count}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    dialog = MainDialog()
    dialog.folder_combo.addItems()# 添加所有盘符作为选项
    if dialog.exec() == QDialog.Accepted:
      print("处理完成!")
    sys.exit(app.exec())

在这个示例中,我们创建了一个名为`MainDialog`的对话框类。界面包含一个下拉框用于选择文件夹,一个按钮用于开始处理操作。

当用户选择文件夹后,程序会列出该文件夹下所有扩展名为`.xls`的文件,并将其添加到下拉框中。

当用户点击开始处理按钮时,程序会遍历文件夹下的所有`.xls`文件(除了用于基础工作簿的文件),并逐一读取它们的内容。然后,将每个工作簿中的数据累加到基础工作簿中,在累加完成后,新的基础工作簿会保存为`123.xls`。

在累加操作完成后,程序会弹出一个提示框,显示成功累加的工作簿数量。

请注意,这只是一个简单的示例,并未处理异常情况(如文件不存在、无法读取等)。你可能需要根据实际情况进行必要的错误处理。

希望这个示例能帮助你实现所描述的功能!如果有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-10 11:13:54

FishC 发表于 2024-2-10 11:13
下面是一个实现你所描述功能的示例代码:




这段代码要放到第4#楼的代码中。。。

FishC 发表于 2024-2-10 11:14:23

清風 发表于 2024-02-10 11:13
这段代码要放到第4#楼的代码中。。。

非常抱歉,我没有理解你的问题。以下是已将第四楼的代码与新功能代码合并的示例代码:

import sys
import os
import xlrd
import xlwt
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QComboBox, QPushButton, QMessageBox, QFileDialog

class LoginDialog(QDialog):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("用户登录")
      
      layout = QVBoxLayout()
      
      account_label = QLabel("帐号:")
      self.account_edit = QLineEdit()
      layout.addWidget(account_label)
      layout.addWidget(self.account_edit)
      
      password_label = QLabel("密码:")
      self.password_edit = QLineEdit()
      self.password_edit.setEchoMode(QLineEdit.Password)
      layout.addWidget(password_label)
      layout.addWidget(self.password_edit)
      
      login_button = QPushButton("登录")
      login_button.clicked.connect(self.login)
      layout.addWidget(login_button)
      
      self.setLayout(layout)

    def login(self):
      account = self.account_edit.text()
      password = self.password_edit.text()
      
      # 在这里实现验证逻辑,验证帐号密码是否正确
      
      if account == "admin" and password == "123456":
            self.accept()# 登录成功,关闭对话框
      else:
            print("用户名或密码错误!")
      
class MainDialog(QDialog):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("功能选择")
      
      layout = QVBoxLayout()
      
      folder_label = QLabel("请选择文件夹:")
      self.folder_combo = QComboBox()
      self.folder_combo.currentIndexChanged.connect(self.load_files)
      layout.addWidget(folder_label)
      layout.addWidget(self.folder_combo)
      
      process_button = QPushButton("开始处理")
      process_button.clicked.connect(self.process_files)
      layout.addWidget(process_button)
      
      self.setLayout(layout)
      
      self.folder_combo.addItem("--- 请选择 ---")
      self.base_workbook = None

    def load_files(self, index):
      if index == 0:
            return
      
      folder_path = self.folder_combo.currentText()
      files = []
      for file in os.listdir(folder_path):
            if file.endswith(".xls"):
                files.append(file)
      
      self.base_workbook = None
      if files:
            self.folder_combo.setEnabled(False)
            self.base_workbook = None
            for file in files:
                self.folder_combo.addItem(file)
   
    def process_files(self):
      if not self.base_workbook:
            QMessageBox.warning(self, "错误", "请先选择基础工作簿!")
            return
      
      folder_path = self.folder_combo.currentText()
      count = 0
      for file in os.listdir(folder_path):
            if file.endswith(".xls") and file != self.base_workbook:
                workbook_path = os.path.join(folder_path, file)
                try:
                  base_wb = xlrd.open_workbook(self.base_workbook, formatting_info=True)
                  wb = xlrd.open_workbook(workbook_path, formatting_info=True)
                  base_ws = base_wb.sheet_by_index(0)
                  ws = wb.sheet_by_index(0)
                  
                  for row in range(0, ws.nrows):
                        for col in range(0, ws.ncols):
                            cell_value = ws.cell_value(row, col)
                            base_ws.write(row, col, cell_value)
                  
                  count += 1
                  new_workbook_path = os.path.join(folder_path, "123.xls")
                  with open(new_workbook_path, "w") as f:
                        base_wb.save(f)
                except Exception as e:
                  print(f"处理工作簿 {file} 出错:{str(e)}")
      
      QMessageBox.information(self, "提示", f"累加成功的工作簿数目:{count}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
   
    login_dialog = LoginDialog()
    if login_dialog.exec() != QDialog.Accepted:
      sys.exit(-1)
   
    main_dialog = MainDialog()
    main_dialog.folder_combo.addItems(QFileDialog.getLogicalDrives())# 添加所有盘符作为选项
   
    if main_dialog.exec() == QDialog.Accepted:
      print("处理完成!")
   
    sys.exit(app.exec())

在这个示例中,首先创建了一个登录对话框`LoginDialog`,让用户输入帐号和密码进行验证。如果验证成功,则关闭登录对话框并打开主界面`MainDialog`,该界面包含了文件夹选择和处理按钮。当用户选择文件夹后,会列出该文件夹下的所有`.xls`文件,并将其添加到下拉框中。当用户点击开始处理按钮时,程序会遍历文件夹中的所有`.xls`文件(除了用于基础工作簿的文件),逐一读取它们的内容,并将数据累加到基础工作簿中。最终,累加完成后的基础工作簿会保存为`123.xls`。处理完成后,程序会弹出一个消息框,显示成功累加的工作簿数量。

希望这次的代码满足你的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-10 11:15:39

本帖最后由 清風 于 2024-2-10 11:22 编辑

123

FishC 发表于 2024-2-10 11:15:49

清風 发表于 2024-02-10 11:15
报错:
Traceback (most recent call last):
File ...

这个错误是因为没有正确导入QLineEdit类。请将以下代码行添加到你的代码开头的导入部分:
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QFileDialog, QComboBox
这样就可以正确导入QLineEdit类并修复该错误。希望这能帮助你解决问题,如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-10 11:17:34

FishC 发表于 2024-2-10 11:15
这个错误是因为没有正确导入QLineEdit类。请将以下代码行添加到你的代码开头的导入部分:

这样就可 ...

输入正确用户名和密码后,报错:

Traceback (most recent call last):
File "D:\Python\pythonProject\Wvqqm\界面\登录.py", line 123, in <module>
    main_dialog.folder_combo.addItems(QFileDialog.getLogicalDrives())# 添加所有盘符作为选项
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'PySide6.QtWidgets.QFileDialog' has no attribute 'getLogicalDrives'

FishC 发表于 2024-2-10 11:17:45

清風 发表于 2024-02-10 11:17
输入正确用户名和密码后,报错:

Traceback (most...

抱歉,这个错误是因为QFileDialog类没有getLogicalDrives方法。你可以使用QStorageInfo来获取逻辑驱动器列表。请将以下代码行替换为添加盘符选项的代码行:import sysfrom PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBoxfrom PySide6.QtCore import QDir, QStorageInfoclass LoginDialog(QDialog):    def __init__(self):      super().__init__()      self.setWindowTitle("用户登录")                layout = QVBoxLayout()                account_label = QLabel("帐号:")      self.account_edit = QLineEdit()      layout.addWidget(account_label)      layout.addWidget(self.account_edit)                password_label = QLabel("密码:")      self.password_edit = QLineEdit()      self.password_edit.setEchoMode(QLineEdit.Password)      layout.addWidget(password_label)      layout.addWidget(self.password_edit)                login_button = QPushButton("登录")      login_button.clicked.connect(self.login)      layout.addWidget(login_button)                self.setLayout(layout)                def login(self):      account = self.account_edit.text()      password = self.password_edit.text()                        # 在这里实现验证逻辑,验证帐号密码是否正确      if account == "admin" and password == "123456":            self.accept()      else:            print("用户名或密码错误!")if __name__ == "__main__":    app = QApplication(sys.argv)    dialog = LoginDialog()    if dialog.exec() == QDialog.Accepted:      print("登录成功!")      main_dialog = QDialog()      main_dialog.setWindowTitle("主界面")                # 获取所有逻辑驱动器,并添加作为选项      drives =       main_dialog.folder_combo = QComboBox()      main_dialog.folder_combo.addItems(drives)      layout = QVBoxLayout()      layout.addWidget(QLabel("选择逻辑驱动器:"))      layout.addWidget(main_dialog.folder_combo)      main_dialog.setLayout(layout)                main_dialog.show()      sys.exit(app.exec())这样就可以使用QStorageInfo类获取逻辑驱动器列表,并将其添加为选项。希望这次能够解决你的问题。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-10 11:18:05

FishC 发表于 2024-2-10 11:17
抱歉,这个错误是因为QFileDialog类没有getLogicalDrives方法。你可以使用QStorageInfo来获取逻辑驱动 ...

回复请注意python格式

FishC 发表于 2024-2-10 11:18:23

清風 发表于 2024-02-10 11:18
回复请注意python格式

非常抱歉,以下是格式正确的代码:import sys
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox
from PySide6.QtCore import QDir, QStorageInfo

class LoginDialog(QDialog):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("用户登录")

      layout = QVBoxLayout()

      account_label = QLabel("帐号:")
      self.account_edit = QLineEdit()
      layout.addWidget(account_label)
      layout.addWidget(self.account_edit)

      password_label = QLabel("密码:")
      self.password_edit = QLineEdit()
      self.password_edit.setEchoMode(QLineEdit.Password)
      layout.addWidget(password_label)
      layout.addWidget(self.password_edit)

      login_button = QPushButton("登录")
      login_button.clicked.connect(self.login)
      layout.addWidget(login_button)

      self.setLayout(layout)

    def login(self):
      account = self.account_edit.text()
      password = self.password_edit.text()

      # 在这里实现验证逻辑,验证帐号密码是否正确
      if account == "admin" and password == "123456":
            self.accept()
      else:
            print("用户名或密码错误!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    dialog = LoginDialog()
    if dialog.exec() == QDialog.Accepted:
      print("登录成功!")
      main_dialog = QDialog()
      main_dialog.setWindowTitle("主界面")

      # 获取所有逻辑驱动器,并添加作为选项
      drives =
      main_dialog.folder_combo = QComboBox()
      main_dialog.folder_combo.addItems(drives)

      layout = QVBoxLayout()
      layout.addWidget(QLabel("选择逻辑驱动器:"))
      layout.addWidget(main_dialog.folder_combo)
      main_dialog.setLayout(layout)

      main_dialog.show()
      sys.exit(app.exec())我希望这次提交的代码格式是正确的,对你有所帮助。如果你还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

清風 发表于 2024-2-10 11:19:55

本帖最后由 清風 于 2024-2-10 11:22 编辑

123

FishC 发表于 2024-2-10 11:20:04

清風 发表于 2024-02-10 11:19
报错:
Traceback (most recent call last):
File ...

非常抱歉,我在代码中遗漏了一个导入语句。请将以下代码插入到导入部分的顶部:

from PySide6.QtWidgets import QComboBox

这将解决上述错误。希望这次的回答能够帮助你成功运行代码。如有更多问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 请问有现成的用户登录界面吗?