鱼C论坛

 找回密码
 立即注册
查看: 327|回复: 3

[已解决]程序运行出错~~

[复制链接]
发表于 2024-2-10 22:40:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

import sys
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox
from PySide6.QtCore import QDir, QStorageInfo
from PySide6.QtWidgets import QComboBox

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

        layout = QVBoxLayout()

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

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



        # 获取所有逻辑驱动器,并添加作为选项
        drives = [drive.device() for drive in QStorageInfo.mountedVolumes()]
        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())



运行后 下拉驱动器框,没有可选择内容。(就是看不到本机的C:\  d:\ 这些,选择框是空的。
最佳答案
2024-2-10 22:44:09
清風 发表于 2024-02-10 22:43
报错:
Traceback (most recent call last):
  File ...


非常抱歉,看起来您使用的是PySide6库的旧版本,该版本不支持`QStorageInfo.mountPoints()`方法。为了获取逻辑驱动器,您可以尝试使用`QDir.drives()`方法来替代。以下是修改后的代码:

  1. import sys
  2. from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QComboBox
  3. from PySide6.QtCore import QDir

  4. if __name__ == "__main__":
  5.     app = QApplication(sys.argv)
  6.     main_dialog = QDialog()
  7.     main_dialog.setWindowTitle("主界面")
  8.    
  9.     drives = QDir.drives()   # 获取所有逻辑驱动器
  10.    
  11.     main_dialog.folder_combo = QComboBox()
  12.     main_dialog.folder_combo.addItems([drive.path() for drive in drives])
  13.    
  14.     layout = QVBoxLayout()
  15.     layout.addWidget(QLabel("选择逻辑驱动器:"))
  16.     layout.addWidget(main_dialog.folder_combo)
  17.     main_dialog.setLayout(layout)
  18.     main_dialog.show()
  19.    
  20.     sys.exit(app.exec())
复制代码


现在运行程序,下拉框应该会显示所有的逻辑驱动器路径。

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-10 22:41:09 | 显示全部楼层
问题出在获取逻辑驱动器的部分。你需要调用`QStorageInfo.mountPoints()`方法来获取所有的逻辑驱动器。

你可以按照以下方式修改代码:

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

  8.         # 获取所有逻辑驱动器,并添加作为选项
  9.         drives = [drive.path() for drive in QStorageInfo.mountPoints()]
  10.         main_dialog.folder_combo = QComboBox()
  11.         main_dialog.folder_combo.addItems(drives)

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

  16.         main_dialog.show()
  17.         sys.exit(app.exec())
复制代码


现在运行程序,下拉框应该会显示所有的逻辑驱动器路径。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-10 22:43:57 | 显示全部楼层
FishC 发表于 2024-2-10 22:41
问题出在获取逻辑驱动器的部分。你需要调用`QStorageInfo.mountPoints()`方法来获取所有的逻辑驱动器。

...

报错:
Traceback (most recent call last):
  File "D:\Python\pythonProject\Wvqqm\界面\登录2.py", line 49, in <module>
    drives = [drive.path() for drive in QStorageInfo.mountPoints()]
                                        ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'PySide6.QtCore.QStorageInfo' has no attribute 'mountPoints'

回复请注意python格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-10 22:44:09 | 显示全部楼层    本楼为最佳答案   
清風 发表于 2024-02-10 22:43
报错:
Traceback (most recent call last):
  File ...


非常抱歉,看起来您使用的是PySide6库的旧版本,该版本不支持`QStorageInfo.mountPoints()`方法。为了获取逻辑驱动器,您可以尝试使用`QDir.drives()`方法来替代。以下是修改后的代码:

  1. import sys
  2. from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QComboBox
  3. from PySide6.QtCore import QDir

  4. if __name__ == "__main__":
  5.     app = QApplication(sys.argv)
  6.     main_dialog = QDialog()
  7.     main_dialog.setWindowTitle("主界面")
  8.    
  9.     drives = QDir.drives()   # 获取所有逻辑驱动器
  10.    
  11.     main_dialog.folder_combo = QComboBox()
  12.     main_dialog.folder_combo.addItems([drive.path() for drive in drives])
  13.    
  14.     layout = QVBoxLayout()
  15.     layout.addWidget(QLabel("选择逻辑驱动器:"))
  16.     layout.addWidget(main_dialog.folder_combo)
  17.     main_dialog.setLayout(layout)
  18.     main_dialog.show()
  19.    
  20.     sys.exit(app.exec())
复制代码


现在运行程序,下拉框应该会显示所有的逻辑驱动器路径。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表