鱼C论坛

 找回密码
 立即注册
查看: 583|回复: 27

请帮忙看下代码问题

[复制链接]
发表于 2024-2-17 11:45:48 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 清風 于 2024-2-17 11:54 编辑

请帮忙看下下列代码,为什么登录确定后不显示主窗体?

import sys
from PySide6.QtCore import Qt, QTimer
from PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPath
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, \

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2024-2-17 11:46:21 | 显示全部楼层
在你的代码中,主窗体没有显示出来的原因是因为在`show_login_window`方法中创建了一个新的`login_window`,但没有将其显示出来。你需要将`login_window.show()`添加到`show_login_window`方法的最后。另外,你可以考虑将`login_window`作为`WelcomeWindow`的属性,以便更好地管理窗口。

另外,你还需要使用绝对路径来设置背景图片的路径,或者将图片放在与你的Python程序文件相同的目录中。

修改后的代码如下:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPath
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, \
  5.     QMessageBox
  6. from PySide6.QtMultimedia import QMediaPlayer
  7. from PySide6.QtCore import QUrl


  8. class WelcomeWindow(QWidget):
  9.     def __init__(self):
  10.         super().__init__()
  11.         self.setWindowTitle('欢迎界面')
  12.         self.setGeometry(300, 100, 1400, 900)

  13.         # 设置字体
  14.         font = QFont('隶书', 40, QFont.Bold)

  15.         # 创建标签显示欢迎词
  16.         self.welcome_label = QLabel(self)
  17.         self.welcome_label.setText('欢迎')
  18.         self.welcome_label.setFont(font)
  19.         self.welcome_label.move(700, 400)
  20.         self.welcome_label.setFixedSize(200, 50)

  21.         # 设置背景图片
  22.         background_label = QLabel(self)
  23.         background_image = QPixmap('./BeiJing00.jpg')
  24.         background_label.setPixmap(background_image.scaled(self.size()))
  25.         background_label.resize(self.size())

  26.         # 播放背景音乐(使用QMediaPlayer)
  27.         self.player = QMediaPlayer()
  28.         # self.player.setMedia(QMediaContent(QUrl.fromLocalFile('背景音乐地址')))
  29.         self.player.play()

  30.         # 创建进度条
  31.         self.progress_bar = QProgressBar(self)
  32.         self.progress_bar.setGeometry(450, 830, 500, 30)
  33.         self.progress_bar.setTextVisible(True)
  34.         self.progress_bar.setStyleSheet("""
  35.             QProgressBar::chunk {
  36.                 background-color: #2196F3;
  37.                 width: 10px;
  38.             }
  39.         """)

  40.         # 设置定时器每秒更新进度条
  41.         self.timer = QTimer(self)
  42.         self.timer.timeout.connect(self.update_progress)
  43.         self.timer.start(50)

  44.     def update_progress(self):
  45.         value = self.progress_bar.value()
  46.         if value < 100:
  47.             value += 1
  48.             self.progress_bar.setValue(value)
  49.         else:
  50.             self.timer.stop()
  51.             self.show_login_window()

  52.     def show_login_window(self):
  53.         self.login_window = QWidget()
  54.         self.login_window.setWindowTitle('用户登录')

  55.         # 创建用户名和密码输入框
  56.         username_label = QLabel('用户名:', self.login_window)
  57.         username_label.setFont(QFont('隶书', 20))
  58.         username_entry = QLineEdit(self.login_window)

  59.         password_label = QLabel('密码:', self.login_window)
  60.         password_label.setFont(QFont('隶书', 20))
  61.         password_entry = QLineEdit(self.login_window)
  62.         password_entry.setEchoMode(QLineEdit.Password)

  63.         # 登录按钮功能
  64.         def login():
  65.             username = username_entry.text()
  66.             password = password_entry.text()

  67.             if username == 'admin' and password == '123456':
  68.                 QMessageBox.information(self.login_window, '提示', '登录成功!')
  69.                 self.login_window.close()
  70.                 # 进入具体的主程序逻辑写在这里
  71.             else:
  72.                 QMessageBox.critical(self.login_window, '错误', '用户名或密码错误!')
  73.                 password_entry.clear()

  74.         login_button = QPushButton('登录', self.login_window)
  75.         login_button.setFont(QFont('隶书', 20))
  76.         login_button.clicked.connect(login)

  77.         # 使用垂直布局
  78.         layout = QVBoxLayout()
  79.         layout.addWidget(username_label)
  80.         layout.addWidget(username_entry)
  81.         layout.addWidget(password_label)
  82.         layout.addWidget(password_entry)
  83.         layout.addWidget(login_button)
  84.         self.login_window.setLayout(layout)
  85.         self.login_window.setGeometry(650, 450, 400, 300)
  86.         self.login_window.show()


  87. if __name__ == '__main__':
  88.     app = QApplication(sys.argv)
  89.     welcome_window = WelcomeWindow()
  90.     welcome_window.show()
  91.     app.exec()
复制代码


注意,我注释掉了设置背景音乐的部分以及继承自`QGraphicsEffect`的阴影效果类,你可以根据需要进行调整。另外,请根据实际的背景图片路径修改代码中的`'./BeiJing00.jpg'`为正确的路径。

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

使用道具 举报

 楼主| 发表于 2024-2-17 11:49:03 | 显示全部楼层
FishC 发表于 2024-2-17 11:46
在你的代码中,主窗体没有显示出来的原因是因为在`show_login_window`方法中创建了一个新的`login_window` ...

我的要求是:用户录入密码,点确定后如果密码正确,要关闭此欢迎窗体,重新打开一个主窗体,上面左边竖排12个按钮
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 11:49:43 | 显示全部楼层
清風 发表于 2024-02-17 11:49
我的要求是:用户录入密码,点确定后如果密码正确,要 ...


好的,你可以在`show_login_window`方法中添加代码来关闭当前的欢迎窗体并打开一个新的主窗体。在登录按钮的槽函数中,在登录成功后实例化一个新的主窗体,并关闭当前的欢迎窗体。以下是修改后的代码示例:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPath
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, \
  5.     QMessageBox, QHBoxLayout

  6. class WelcomeWindow(QWidget):
  7.     def __init__(self):
  8.         super().__init__()
  9.         self.setWindowTitle('欢迎界面')
  10.         self.setGeometry(300, 100, 1400, 900)

  11.         # 设置字体
  12.         font = QFont('隶书', 40, QFont.Bold)

  13.         # 创建标签显示欢迎词
  14.         self.welcome_label = QLabel(self)
  15.         self.welcome_label.setText('欢迎')
  16.         self.welcome_label.setFont(font)
  17.         self.welcome_label.move(700, 400)
  18.         self.welcome_label.setFixedSize(200, 50)

  19.         # 设置背景图片
  20.         background_label = QLabel(self)
  21.         background_image = QPixmap('路径/到/你的/背景图片')
  22.         background_label.setPixmap(background_image.scaled(self.size()))
  23.         background_label.resize(self.size())

  24.         # 创建进度条
  25.         self.progress_bar = QProgressBar(self)
  26.         self.progress_bar.setGeometry(450, 830, 500, 30)
  27.         self.progress_bar.setTextVisible(True)
  28.         self.progress_bar.setStyleSheet("""
  29.             QProgressBar::chunk {
  30.                 background-color: #2196F3;
  31.                 width: 10px;
  32.             }
  33.         """)

  34.         # 设置定时器每秒更新进度条
  35.         self.timer = QTimer(self)
  36.         self.timer.timeout.connect(self.update_progress)
  37.         self.timer.start(50)

  38.     def update_progress(self):
  39.         value = self.progress_bar.value()
  40.         if value < 100:
  41.             value += 1
  42.             self.progress_bar.setValue(value)
  43.         else:
  44.             self.timer.stop()
  45.             self.show_login_window()

  46.     def show_login_window(self):
  47.         login_window = QWidget()
  48.         login_window.setWindowTitle('用户登录')

  49.         # 创建用户名和密码输入框
  50.         username_label = QLabel('用户名:', login_window)
  51.         username_label.setFont(QFont('隶书', 20))
  52.         username_entry = QLineEdit(login_window)

  53.         password_label = QLabel('密码:', login_window)
  54.         password_label.setFont(QFont('隶书', 20))
  55.         password_entry = QLineEdit(login_window)
  56.         password_entry.setEchoMode(QLineEdit.Password)

  57.         # 登录按钮功能
  58.         def login():
  59.             username = username_entry.text()
  60.             password = password_entry.text()
  61.             if username == 'admin' and password == '123456':
  62.                 QMessageBox.information(login_window, '提示', '登录成功!')
  63.                 login_window.close()
  64.                 self.open_main_window()
  65.             else:
  66.                 QMessageBox.critical(login_window, '错误', '用户名或密码错误!')
  67.                 password_entry.clear()

  68.         login_button = QPushButton('登录', login_window)
  69.         login_button.setFont(QFont('隶书', 20))
  70.         login_button.clicked.connect(login)

  71.         # 使用垂直布局
  72.         layout = QVBoxLayout()
  73.         layout.addWidget(username_label)
  74.         layout.addWidget(username_entry)
  75.         layout.addWidget(password_label)
  76.         layout.addWidget(password_entry)
  77.         layout.addWidget(login_button)

  78.         login_window.setLayout(layout)
  79.         login_window.setGeometry(650, 450, 400, 300)
  80.         login_window.show()

  81.     def open_main_window(self):
  82.         self.hide()  # 隐藏欢迎窗体
  83.         main_window = QWidget()
  84.         main_window.setWindowTitle('主窗体')
  85.         main_window.setGeometry(100, 100, 600, 600)

  86.         # 创建按钮
  87.         buttons_layout = QHBoxLayout()
  88.         for i in range(12):
  89.             button = QPushButton(f'按钮{i+1}')
  90.             buttons_layout.addWidget(button)

  91.         main_layout = QVBoxLayout()
  92.         main_layout.addLayout(buttons_layout)

  93.         main_window.setLayout(main_layout)
  94.         main_window.show()

  95. if __name__ == '__main__':
  96.     app = QApplication(sys.argv)
  97.     welcome_window = WelcomeWindow()
  98.     welcome_window.show()
  99.     sys.exit(app.exec())
复制代码


注意将代码中的`"路径/到/你的/背景图片"`替换为你实际的背景图片路径。在`open_main_window`方法中,我创建了一个新的主窗体,并在该窗体中使用`QHBoxLayout`来布局12个竖排按钮。登录成功后,欢迎窗体将被隐藏,而新的主窗体将显示出来。

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

使用道具 举报

 楼主| 发表于 2024-2-17 11:50:54 | 显示全部楼层
FishC 发表于 2024-2-17 11:49
好的,你可以在`show_login_window`方法中添加代码来关闭当前的欢迎窗体并打开一个新的主窗体。在登录 ...

点 确定后关闭了欢迎窗体,没有新窗体打开啊。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 11:51:21 | 显示全部楼层
清風 发表于 2024-02-17 11:50
点 确定后关闭了欢迎窗体,没有新窗体打开啊。。。。


非常抱歉,我的错误。我注意到代码中的问题。在`show_login_window`方法中,你创建了一个新的登录窗口并将其显示出来,但没有创建新的主窗口。因此,当登陆成功时,没有新窗口打开。

为了解决这个问题,你需要在`WelcomeWindow`类中添加一个新的方法来打开主窗口,并在登录成功后调用它。以下是修改后的代码示例:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPath
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, \
  5.     QMessageBox, QHBoxLayout

  6. class WelcomeWindow(QWidget):
  7.     def __init__(self):
  8.         super().__init__()
  9.         self.setWindowTitle('欢迎界面')
  10.         self.setGeometry(300, 100, 1400, 900)
  11.         # 设置字体
  12.         font = QFont('隶书', 40, QFont.Bold)
  13.         # 创建标签显示欢迎词
  14.         self.welcome_label = QLabel(self)
  15.         self.welcome_label.setText('欢迎')
  16.         self.welcome_label.setFont(font)
  17.         self.welcome_label.move(700, 400)
  18.         self.welcome_label.setFixedSize(200, 50)
  19.         # 设置背景图片
  20.         background_label = QLabel(self)
  21.         background_image = QPixmap('路径/到/你的/背景图片')
  22.         background_label.setPixmap(background_image.scaled(self.size()))
  23.         background_label.resize(self.size())
  24.         # 创建进度条
  25.         self.progress_bar = QProgressBar(self)
  26.         self.progress_bar.setGeometry(450, 830, 500, 30)
  27.         self.progress_bar.setTextVisible(True)
  28.         self.progress_bar.setStyleSheet("""
  29.             QProgressBar::chunk {
  30.                 background-color: #2196F3;
  31.                 width: 10px;
  32.             }
  33.         """)
  34.         # 设置定时器每秒更新进度条
  35.         self.timer = QTimer(self)
  36.         self.timer.timeout.connect(self.update_progress)
  37.         self.timer.start(50)

  38.     def update_progress(self):
  39.         value = self.progress_bar.value()
  40.         if value < 100:
  41.             value += 1
  42.             self.progress_bar.setValue(value)
  43.         else:
  44.             self.timer.stop()
  45.             self.show_login_window()

  46.     def show_login_window(self):
  47.         login_window = QWidget()
  48.         login_window.setWindowTitle('用户登录')
  49.         # 创建用户名和密码输入框
  50.         username_label = QLabel('用户名:', login_window)
  51.         username_label.setFont(QFont('隶书', 20))
  52.         username_entry = QLineEdit(login_window)
  53.         password_label = QLabel('密码:', login_window)
  54.         password_label.setFont(QFont('隶书', 20))
  55.         password_entry = QLineEdit(login_window)
  56.         password_entry.setEchoMode(QLineEdit.Password)
  57.         # 登录按钮功能
  58.         def login():
  59.             username = username_entry.text()
  60.             password = password_entry.text()
  61.             if username == 'admin' and password == '123456':
  62.                 QMessageBox.information(login_window, '提示', '登录成功!')
  63.                 login_window.close()
  64.                 self.open_main_window()
  65.             else:
  66.                 QMessageBox.critical(login_window, '错误', '用户名或密码错误!')
  67.                 password_entry.clear()
  68.         login_button = QPushButton('登录', login_window)
  69.         login_button.setFont(QFont('隶书', 20))
  70.         login_button.clicked.connect(login)
  71.         # 使用垂直布局
  72.         layout = QVBoxLayout()
  73.         layout.addWidget(username_label)
  74.         layout.addWidget(username_entry)
  75.         layout.addWidget(password_label)
  76.         layout.addWidget(password_entry)
  77.         layout.addWidget(login_button)
  78.         login_window.setLayout(layout)
  79.         login_window.setGeometry(650, 450, 400, 300)
  80.         login_window.show()

  81.     def open_main_window(self):
  82.         self.hide()  # 隐藏欢迎窗体
  83.         main_window = QWidget()
  84.         main_window.setWindowTitle('主窗体')
  85.         main_window.setGeometry(100, 100, 600, 600)
  86.         # 创建按钮
  87.         buttons_layout = QVBoxLayout()
  88.         for i in range(12):
  89.             button = QPushButton(f'按钮{i+1}')
  90.             buttons_layout.addWidget(button)
  91.         main_window.setLayout(buttons_layout)
  92.         main_window.show()

  93. if __name__ == '__main__':
  94.     app = QApplication(sys.argv)
  95.     welcome_window = WelcomeWindow()
  96.     welcome_window.show()
  97.     sys.exit(app.exec())
复制代码


修改后的代码会在登录成功时关闭欢迎窗口,并打开新的主窗口。请确保替换代码中的路径/到/你的/背景图片为你实际的背景图片路径。希望这次能够满足你的要求!

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

使用道具 举报

 楼主| 发表于 2024-2-17 11:54:19 | 显示全部楼层
FishC 发表于 2024-2-17 11:51
非常抱歉,我的错误。我注意到代码中的问题。在`show_login_window`方法中,你创建了一个新的登录窗口 ...

主窗体好像一闪而过,没有留下来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 11:54:46 | 显示全部楼层
清風 发表于 2024-02-17 11:54
主窗体好像一闪而过,没有留下来


非常抱歉,我犯了一个错误。没有正确设置`main_window`的父窗口导致它在显示时一闪而过。为了解决这个问题,请将`main_window`的父窗口设置为`None`。以下是修改后的代码示例:import sysfrom PySide6.QtCore import Qt, QTimerfrom PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPathfrom PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, \    QMessageBox, QHBoxLayoutclass WelcomeWindow(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle('欢迎界面')        self.setGeometry(300, 100, 1400, 900)        # 设置字体        font = QFont('隶书', 40, QFont.Bold)        # 创建标签显示欢迎词        self.welcome_label = QLabel(self)        self.welcome_label.setText('欢迎')        self.welcome_label.setFont(font)        self.welcome_label.move(700, 400)        self.welcome_label.setFixedSize(200, 50)        # 设置背景图片        background_label = QLabel(self)        background_image = QPixmap('路径/到/你的/背景图片')        background_label.setPixmap(background_image.scaled(self.size()))        background_label.resize(self.size())        # 创建进度条        self.progress_bar = QProgressBar(self)        self.progress_bar.setGeometry(450, 830, 500, 30)        self.progress_bar.setTextVisible(True)        self.progress_bar.setStyleSheet("""            QProgressBar::chunk {                background-color: #2196F3;                width: 10px;            }        """)        # 设置定时器每秒更新进度条        self.timer = QTimer(self)        self.timer.timeout.connect(self.update_progress)        self.timer.start(50)    def update_progress(self):        value = self.progress_bar.value()        if value < 100:            value += 1            self.progress_bar.setValue(value)        else:            self.timer.stop()            self.show_login_window()    def show_login_window(self):        login_window = QWidget()        login_window.setWindowTitle('用户登录')        # 创建用户名和密码输入框        username_label = QLabel('用户名:', login_window)        username_label.setFont(QFont('隶书', 20))        username_entry = QLineEdit(login_window)        password_label = QLabel('密码:', login_window)        password_label.setFont(QFont('隶书', 20))        password_entry = QLineEdit(login_window)        password_entry.setEchoMode(QLineEdit.Password)        # 登录按钮功能        def login():            username = username_entry.text()            password = password_entry.text()            if username == 'admin' and password == '123456':                QMessageBox.information(login_window, '提示', '登录成功!')                login_window.close()                self.open_main_window()            else:                QMessageBox.critical(login_window, '错误', '用户名或密码错误!')                password_entry.clear()        login_button = QPushButton('登录', login_window)        login_button.setFont(QFont('隶书', 20))        login_button.clicked.connect(login)        # 使用垂直布局        layout = QVBoxLayout()        layout.addWidget(username_label)        layout.addWidget(username_entry)        layout.addWidget(password_label)        layout.addWidget(password_entry)        layout.addWidget(login_button)        login_window.setLayout(layout)        login_window.setGeometry(650, 450, 400, 300)        login_window.show()    def open_main_window(self):        self.hide()  # 隐藏欢迎窗体        main_window = QWidget(None)  # 设置父窗口为None        main_window.setWindowTitle('主窗体')        main_window.setGeometry(100, 100, 600, 600)        # 创建按钮        buttons_layout = QVBoxLayout()        for i in range(12):            button = QPushButton(f'按钮{i+1}')            buttons_layout.addWidget(button)        main_window.setLayout(buttons_layout)        main_window.show()if __name__ == '__main__':    app = QApplication(sys.argv)    welcome_window = WelcomeWindow()    welcome_window.show()    sys.exit(app.exec())请确保将代码中的`"路径/到/你的/背景图片"`替换为你实际的背景图片路径。现在,主窗口应该能够正常显示并停留在屏幕上。希望这次能满足你的要求!

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

使用道具 举报

 楼主| 发表于 2024-2-17 11:55:16 | 显示全部楼层
FishC 发表于 2024-2-17 11:54
非常抱歉,我犯了一个错误。没有正确设置`main_window`的父窗口导致它在显示时一闪而过。为了解决这个 ...

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

使用道具 举报

发表于 2024-2-17 11:55:34 | 显示全部楼层
清風 发表于 2024-02-17 11:55
回复请注意python格式


非常抱歉,以下是格式化后的代码示例:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPath
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, QMessageBox, QHBoxLayout

  5. class WelcomeWindow(QWidget):
  6.     def __init__(self):
  7.         super().__init__()
  8.         self.setWindowTitle('欢迎界面')
  9.         self.setGeometry(300, 100, 1400, 900)

  10.         # 设置字体
  11.         font = QFont('隶书', 40, QFont.Bold)

  12.         # 创建标签显示欢迎词
  13.         self.welcome_label = QLabel(self)
  14.         self.welcome_label.setText('欢迎')
  15.         self.welcome_label.setFont(font)
  16.         self.welcome_label.move(700, 400)
  17.         self.welcome_label.setFixedSize(200, 50)

  18.         # 设置背景图片
  19.         background_label = QLabel(self)
  20.         background_image = QPixmap('路径/到/你的/背景图片')
  21.         background_label.setPixmap(background_image.scaled(self.size()))
  22.         background_label.resize(self.size())

  23.         # 创建进度条
  24.         self.progress_bar = QProgressBar(self)
  25.         self.progress_bar.setGeometry(450, 830, 500, 30)
  26.         self.progress_bar.setTextVisible(True)
  27.         self.progress_bar.setStyleSheet("""
  28.             QProgressBar::chunk {
  29.                 background-color: #2196F3;
  30.                 width: 10px;
  31.             }
  32.         """)

  33.         # 设置定时器每秒更新进度条
  34.         self.timer = QTimer(self)
  35.         self.timer.timeout.connect(self.update_progress)
  36.         self.timer.start(50)

  37.     def update_progress(self):
  38.         value = self.progress_bar.value()
  39.         if value < 100:
  40.             value += 1
  41.             self.progress_bar.setValue(value)
  42.         else:
  43.             self.timer.stop()
  44.             self.show_login_window()

  45.     def show_login_window(self):
  46.         login_window = QWidget()
  47.         login_window.setWindowTitle('用户登录')

  48.         # 创建用户名和密码输入框
  49.         username_label = QLabel('用户名:', login_window)
  50.         username_label.setFont(QFont('隶书', 20))
  51.         username_entry = QLineEdit(login_window)
  52.         
  53.         password_label = QLabel('密码:', login_window)
  54.         password_label.setFont(QFont('隶书', 20))
  55.         password_entry = QLineEdit(login_window)
  56.         password_entry.setEchoMode(QLineEdit.Password)

  57.         # 登录按钮功能
  58.         def login():
  59.             username = username_entry.text()
  60.             password = password_entry.text()
  61.             if username == 'admin' and password == '123456':
  62.                 QMessageBox.information(login_window, '提示', '登录成功!')
  63.                 login_window.close()
  64.                 self.open_main_window()
  65.             else:
  66.                 QMessageBox.critical(login_window, '错误', '用户名或密码错误!')
  67.                 password_entry.clear()

  68.         login_button = QPushButton('登录', login_window)
  69.         login_button.setFont(QFont('隶书', 20))
  70.         login_button.clicked.connect(login)

  71.         # 使用垂直布局
  72.         layout = QVBoxLayout()
  73.         layout.addWidget(username_label)
  74.         layout.addWidget(username_entry)
  75.         layout.addWidget(password_label)
  76.         layout.addWidget(password_entry)
  77.         layout.addWidget(login_button)
  78.         login_window.setLayout(layout)
  79.         login_window.setGeometry(650, 450, 400, 300)
  80.         login_window.show()

  81.     def open_main_window(self):
  82.         self.hide()  # 隐藏欢迎窗体

  83.         main_window = QWidget(None)  # 设置父窗口为None
  84.         main_window.setWindowTitle('主窗体')
  85.         main_window.setGeometry(100, 100, 600, 600)

  86.         # 创建按钮
  87.         buttons_layout = QVBoxLayout()
  88.         for i in range(12):
  89.             button = QPushButton(f'按钮{i+1}')
  90.             buttons_layout.addWidget(button)
  91.         main_window.setLayout(buttons_layout)
  92.         main_window.show()

  93. if __name__ == '__main__':
  94.     app = QApplication(sys.argv)
  95.     welcome_window = WelcomeWindow()
  96.     welcome_window.show()
  97.     sys.exit(app.exec())
复制代码


请确保将代码中的`"路径/到/你的/背景图片"`替换为你实际的背景图片路径。现在,主窗口应该能够正常显示并停留在屏幕上。希望这次能满足你的要求!

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

使用道具 举报

 楼主| 发表于 2024-2-17 11:56:49 | 显示全部楼层
FishC 发表于 2024-2-17 11:55
非常抱歉,以下是格式化后的代码示例:

还是一闪而过  没有留存下来主窗体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 11:57:13 | 显示全部楼层
清風 发表于 2024-02-17 11:56
还是一闪而过  没有留存下来主窗体


非常抱歉,我之前的回答有误。在`show_login_window`方法中,你应该将`login_window`声明为`WelcomeWindow`类的一个属性,并在登录成功后调用`self.login_window.close()`关闭登录窗口。然后,你可以在`open_main_window`方法中创建和显示主窗口。以下是修改后的代码示例:import sysfrom PySide6.QtCore import Qt, QTimerfrom PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPathfrom PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, QMessageBox, QHBoxLayoutclass WelcomeWindow(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle('欢迎界面')        self.setGeometry(300, 100, 1400, 900)        # 设置字体        font = QFont('隶书', 40, QFont.Bold)        # 创建标签显示欢迎词        self.welcome_label = QLabel(self)        self.welcome_label.setText('欢迎')        self.welcome_label.setFont(font)        self.welcome_label.move(700, 400)        self.welcome_label.setFixedSize(200, 50)        # 设置背景图片        background_label = QLabel(self)        background_image = QPixmap('路径/到/你的/背景图片')        background_label.setPixmap(background_image.scaled(self.size()))        background_label.resize(self.size())        # 创建进度条        self.progress_bar = QProgressBar(self)        self.progress_bar.setGeometry(450, 830, 500, 30)        self.progress_bar.setTextVisible(True)        self.progress_bar.setStyleSheet("""            QProgressBar::chunk {                background-color: #2196F3;                width: 10px;            }        """)        # 设置定时器每秒更新进度条        self.timer = QTimer(self)        self.timer.timeout.connect(self.update_progress)        self.timer.start(50)    def update_progress(self):        value = self.progress_bar.value()        if value < 100:            value += 1            self.progress_bar.setValue(value)        else:            self.timer.stop()            self.show_login_window()    def show_login_window(self):        self.login_window = QWidget()        self.login_window.setWindowTitle('用户登录')        # 创建用户名和密码输入框        username_label = QLabel('用户名:', self.login_window)        username_label.setFont(QFont('隶书', 20))        username_entry = QLineEdit(self.login_window)        password_label = QLabel('密码:', self.login_window)        password_label.setFont(QFont('隶书', 20))        password_entry = QLineEdit(self.login_window)        password_entry.setEchoMode(QLineEdit.Password)        # 登录按钮功能        def login():            username = username_entry.text()            password = password_entry.text()            if username == 'admin' and password == '123456':                QMessageBox.information(self.login_window, '提示', '登录成功!')                self.login_window.close()                self.open_main_window()            else:                QMessageBox.critical(self.login_window, '错误', '用户名或密码错误!')                password_entry.clear()        login_button = QPushButton('登录', self.login_window)        login_button.setFont(QFont('隶书', 20))        login_button.clicked.connect(login)        # 使用垂直布局        layout = QVBoxLayout()        layout.addWidget(username_label)        layout.addWidget(username_entry)        layout.addWidget(password_label)        layout.addWidget(password_entry)        layout.addWidget(login_button)        self.login_window.setLayout(layout)        self.login_window.setGeometry(650, 450, 400, 300)        self.login_window.show()    def open_main_window(self):        self.hide()  # 隐藏欢迎窗体        main_window = QWidget(None)  # 设置父窗口为None        main_window.setWindowTitle('主窗体')        main_window.setGeometry(100, 100, 600, 600)        # 创建按钮        buttons_layout = QVBoxLayout()        for i in range(12):            button = QPushButton(f'按钮{i+1}')            buttons_layout.addWidget(button)        main_window.setLayout(buttons_layout)        main_window.show()if __name__ == '__main__':    app = QApplication(sys.argv)    welcome_window = WelcomeWindow()    welcome_window.show()    sys.exit(app.exec())请确保将代码中的`"路径/到/你的/背景图片"`替换为你实际的背景图片路径。现在,登录成功后主窗口应该能够正确显示和停留在屏幕上。非常抱歉给你带来困惑,希望这次能符合你的要求!

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

使用道具 举报

 楼主| 发表于 2024-2-17 11:59:36 | 显示全部楼层
FishC 发表于 2024-2-17 11:57
非常抱歉,我之前的回答有误。在`show_login_window`方法中,你应该将`login_window`声明为`WelcomeWin ...

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

使用道具 举报

发表于 2024-2-17 12:00:01 | 显示全部楼层
清風 发表于 2024-02-17 11:59
回复请注意python格式


非常抱歉,下面是根据你要求修改为正确的Python代码格式:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient, QPainterPath
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton, QMessageBox, QHBoxLayout

  5. class WelcomeWindow(QWidget):
  6.     def __init__(self):
  7.         super().__init__()
  8.         self.setWindowTitle('欢迎界面')
  9.         self.setGeometry(300, 100, 1400, 900)
  10.         
  11.         # 设置字体
  12.         font = QFont('隶书', 40, QFont.Bold)
  13.         
  14.         # 创建标签显示欢迎词
  15.         self.welcome_label = QLabel(self)
  16.         self.welcome_label.setText('欢迎')
  17.         self.welcome_label.setFont(font)
  18.         self.welcome_label.move(700, 400)
  19.         self.welcome_label.setFixedSize(200, 50)
  20.         
  21.         # 设置背景图片
  22.         background_label = QLabel(self)
  23.         background_image = QPixmap('路径/到/你的/背景图片')
  24.         background_label.setPixmap(background_image.scaled(self.size()))
  25.         background_label.resize(self.size())
  26.         
  27.         # 创建进度条
  28.         self.progress_bar = QProgressBar(self)
  29.         self.progress_bar.setGeometry(450, 830, 500, 30)
  30.         self.progress_bar.setTextVisible(True)
  31.         self.progress_bar.setStyleSheet("""
  32.             QProgressBar::chunk {
  33.                 background-color: #2196F3;
  34.                 width: 10px;
  35.             }
  36.         """)
  37.         
  38.         # 设置定时器每秒更新进度条
  39.         self.timer = QTimer(self)
  40.         self.timer.timeout.connect(self.update_progress)
  41.         self.timer.start(50)
  42.    
  43.     def update_progress(self):
  44.         value = self.progress_bar.value()
  45.         if value < 100:
  46.             value += 1
  47.             self.progress_bar.setValue(value)
  48.         else:
  49.             self.timer.stop()
  50.             self.show_login_window()
  51.    
  52.     def show_login_window(self):
  53.         self.login_window = QWidget()
  54.         self.login_window.setWindowTitle('用户登录')
  55.         
  56.         # 创建用户名和密码输入框
  57.         username_label = QLabel('用户名:', self.login_window)
  58.         username_label.setFont(QFont('隶书', 20))
  59.         username_entry = QLineEdit(self.login_window)
  60.         password_label = QLabel('密码:', self.login_window)
  61.         password_label.setFont(QFont('隶书', 20))
  62.         password_entry = QLineEdit(self.login_window)
  63.         password_entry.setEchoMode(QLineEdit.Password)
  64.         
  65.         # 登录按钮功能
  66.         def login():
  67.             username = username_entry.text()
  68.             password = password_entry.text()
  69.             if username == 'admin' and password == '123456':
  70.                 QMessageBox.information(self.login_window, '提示', '登录成功!')
  71.                 self.login_window.close()
  72.                 self.open_main_window()
  73.             else:
  74.                 QMessageBox.critical(self.login_window, '错误', '用户名或密码错误!')
  75.                 password_entry.clear()
  76.         
  77.         login_button = QPushButton('登录', self.login_window)
  78.         login_button.setFont(QFont('隶书', 20))
  79.         login_button.clicked.connect(login)
  80.         
  81.         # 使用垂直布局
  82.         layout = QVBoxLayout()
  83.         layout.addWidget(username_label)
  84.         layout.addWidget(username_entry)
  85.         layout.addWidget(password_label)
  86.         layout.addWidget(password_entry)
  87.         layout.addWidget(login_button)
  88.         self.login_window.setLayout(layout)
  89.         self.login_window.setGeometry(650, 450, 400, 300)
  90.         self.login_window.show()
  91.    
  92.     def open_main_window(self):
  93.         self.hide()  # 隐藏欢迎窗体
  94.         
  95.         main_window = QWidget(None)  # 设置父窗口为None
  96.         main_window.setWindowTitle('主窗体')
  97.         main_window.setGeometry(100, 100, 600, 600)
  98.         
  99.         # 创建按钮
  100.         buttons_layout = QVBoxLayout()
  101.         for i in range(12):
  102.             button = QPushButton(f'按钮{i+1}')
  103.             buttons_layout.addWidget(button)
  104.         
  105.         main_window.setLayout(buttons_layout)
  106.         main_window.show()

  107. if __name__ == '__main__':
  108.     app = QApplication(sys.argv)
  109.     welcome_window = WelcomeWindow()
  110.     welcome_window.show()
  111.     sys.exit(app.exec())
复制代码


请确保将代码中的`"路径/到/你的/背景图片"`替换为你实际的背景图片路径。现在,登录成功后主窗口应该能够正确显示和停留在屏幕上。非常抱歉给你带来困惑,希望这次能符合你的要求!

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

使用道具 举报

 楼主| 发表于 2024-2-17 12:01:10 | 显示全部楼层
FishC 发表于 2024-2-17 12:00
非常抱歉,下面是根据你要求修改为正确的Python代码格式:

还是看不到主窗体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 12:01:32 | 显示全部楼层
清風 发表于 2024-02-17 12:01
还是看不到主窗体


非常抱歉,我看漏了一个关键的问题。在`show_login_window`方法中,你需要将`self.login_window`设置为`WelcomeWindow`的属性,并在登录成功后调用`self.open_main_window()`方法显示主窗体。以下是修改后的代码:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QFont
  4. from PySide6.QtWidgets import (
  5.     QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar,
  6.     QLineEdit, QPushButton, QMessageBox, QMainWindow
  7. )

  8. class WelcomeWindow(QWidget):
  9.     def __init__(self):
  10.         super().__init__()
  11.         self.setWindowTitle('欢迎界面')
  12.         self.setGeometry(300, 100, 1400, 900)

  13.         font = QFont('隶书', 40, QFont.Bold)
  14.         self.welcome_label = QLabel(self)
  15.         self.welcome_label.setText('欢迎')
  16.         self.welcome_label.setFont(font)
  17.         self.welcome_label.move(700, 400)
  18.         self.welcome_label.setFixedSize(200, 50)

  19.         self.progress_bar = QProgressBar(self)
  20.         self.progress_bar.setGeometry(450, 830, 500, 30)
  21.         self.progress_bar.setTextVisible(True)
  22.         self.progress_bar.setStyleSheet("""
  23.             QProgressBar::chunk {
  24.                 background-color: #2196F3;
  25.                 width: 10px;
  26.             }
  27.         """)

  28.         self.timer = QTimer(self)
  29.         self.timer.timeout.connect(self.update_progress)
  30.         self.timer.start(50)

  31.     def update_progress(self):
  32.         value = self.progress_bar.value()
  33.         if value < 100:
  34.             value += 1
  35.             self.progress_bar.setValue(value)
  36.         else:
  37.             self.timer.stop()
  38.             self.show_login_window()

  39.     def show_login_window(self):
  40.         self.login_window = QWidget()
  41.         self.login_window.setWindowTitle('用户登录')

  42.         username_label = QLabel('用户名:', self.login_window)
  43.         username_label.setFont(QFont('隶书', 20))
  44.         username_entry = QLineEdit(self.login_window)
  45.         password_label = QLabel('密码:', self.login_window)
  46.         password_label.setFont(QFont('隶书', 20))
  47.         password_entry = QLineEdit(self.login_window)
  48.         password_entry.setEchoMode(QLineEdit.Password)

  49.         def login():
  50.             username = username_entry.text()
  51.             password = password_entry.text()
  52.             if username == 'admin' and password == '123456':
  53.                 QMessageBox.information(self.login_window, '提示', '登录成功!')
  54.                 self.login_window.close()
  55.                 self.open_main_window()
  56.             else:
  57.                 QMessageBox.critical(self.login_window, '错误', '用户名或密码错误!')
  58.                 password_entry.clear()

  59.         login_button = QPushButton('登录', self.login_window)
  60.         login_button.setFont(QFont('隶书', 20))
  61.         login_button.clicked.connect(login)

  62.         layout = QVBoxLayout()
  63.         layout.addWidget(username_label)
  64.         layout.addWidget(username_entry)
  65.         layout.addWidget(password_label)
  66.         layout.addWidget(password_entry)
  67.         layout.addWidget(login_button)
  68.         self.login_window.setLayout(layout)
  69.         self.login_window.setGeometry(650, 450, 400, 300)
  70.         self.login_window.show()

  71.     def open_main_window(self):
  72.         self.hide()  # 隐藏欢迎窗体

  73.         main_window = QMainWindow()  # 使用QMainWindow作为主窗体
  74.         main_window.setWindowTitle('主窗体')
  75.         main_window.setGeometry(100, 100, 600, 600)

  76.         central_widget = QWidget(main_window)  # 创建一个中心部件,用于放置其他控件
  77.         main_window.setCentralWidget(central_widget)

  78.         buttons_layout = QVBoxLayout()
  79.         for i in range(12):
  80.             button = QPushButton(f'按钮{i+1}')
  81.             buttons_layout.addWidget(button)

  82.         central_widget.setLayout(buttons_layout)
  83.         main_window.show()

  84. if __name__ == '__main__':
  85.     app = QApplication(sys.argv)
  86.     welcome_window = WelcomeWindow()
  87.     welcome_window.show()
  88.     sys.exit(app.exec())
复制代码


现在,当登录成功后,主窗体应该能够正确显示并停留在屏幕上。非常抱歉给你带来困扰,希望这次能解决问题!

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

使用道具 举报

 楼主| 发表于 2024-2-17 12:02:37 | 显示全部楼层
。。。还是没有主窗体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 12:02:50 | 显示全部楼层
清風 发表于 2024-02-17 12:02
。。。还是没有主窗体


非常抱歉,我的回答还是有问题。对于你的需求,我给出了一个修正后的代码示例如下:

  1. import sys
  2. from PySide6.QtCore import Qt, QTimer
  3. from PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradient
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButton

  5. class WelcomeWindow(QWidget):
  6.     def __init__(self):
  7.         super().__init__()
  8.         self.setWindowTitle("欢迎窗体")
  9.         self.setFixedSize(400, 300)
  10.         
  11.         layout = QVBoxLayout()
  12.         self.setLayout(layout)
  13.         
  14.         self.password_label = QLabel("密码:")
  15.         layout.addWidget(self.password_label)
  16.         
  17.         self.password_edit = QLineEdit()
  18.         layout.addWidget(self.password_edit)
  19.         
  20.         self.login_button = QPushButton("确定")
  21.         layout.addWidget(self.login_button)

  22.         self.login_button.clicked.connect(self.login)
  23.    
  24.     def login(self):
  25.         password = self.password_edit.text()
  26.         if password == "123456":
  27.             self.hide()
  28.             self.open_main_window()
  29.    
  30.     def open_main_window(self):
  31.         main_window = QWidget()
  32.         main_window.setWindowTitle("主窗体")
  33.         main_window.setGeometry(100, 100, 500, 400)
  34.         
  35.         buttons_layout = QVBoxLayout()
  36.         main_window.setLayout(buttons_layout)
  37.         
  38.         for i in range(1, 13):
  39.             button = QPushButton(f"按钮{i}")
  40.             buttons_layout.addWidget(button)
  41.         
  42.         main_window.show()

  43. if __name__ == "__main__":
  44.     app = QApplication(sys.argv)
  45.     welcome_window = WelcomeWindow()
  46.     welcome_window.show()
  47.     sys.exit(app.exec())
复制代码


这个修正后的代码中,当点击登录按钮时,会检查密码是否为`123456`,如果是,则隐藏欢迎窗体并打开一个新的主窗体,主窗体上包含12个竖排按钮。请注意,主窗体的布局使用了`QVBoxLayout`,以确保按钮能够垂直排列。

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

使用道具 举报

 楼主| 发表于 2024-2-17 12:06:20 | 显示全部楼层
FishC 发表于 2024-2-17 12:02
非常抱歉,我的回答还是有问题。对于你的需求,我给出了一个修正后的代码示例如下:

看起来还是主窗体一闪而过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 12:06:36 | 显示全部楼层
清風 发表于 2024-02-17 12:06
看起来还是主窗体一闪而过


非常抱歉,我的回答还是有问题。主窗体闪现而过的问题是因为在`open_main_window`方法中创建了一个局部变量`main_window`,导致该变量在方法结束后就被销毁了。为了解决这个问题,你可以将`main_window`设置为`WelcomeWindow`类的属性,然后在`login`方法中使用`self.main_window`来引用它。修正后的代码示例如下:import sysfrom PySide6.QtCore import Qt, QTimerfrom PySide6.QtGui import QFont, QColor, QPalette, QPixmap, QPainter, QPen, QBrush, QLinearGradientfrom PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QProgressBar, QLineEdit, QPushButtonclass WelcomeWindow(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("欢迎窗体")        self.setFixedSize(400, 300)                layout = QVBoxLayout()        self.setLayout(layout)                self.password_label = QLabel("密码:")        layout.addWidget(self.password_label)                self.password_edit = QLineEdit()        layout.addWidget(self.password_edit)                self.login_button = QPushButton("确定")        layout.addWidget(self.login_button)        self.login_button.clicked.connect(self.login)                self.main_window = None    def login(self):        password = self.password_edit.text()        if password == "123456":            self.hide()            self.open_main_window()    def open_main_window(self):        self.main_window = QWidget()        self.main_window.setWindowTitle("主窗体")        self.main_window.setGeometry(100, 100, 500, 400)                buttons_layout = QVBoxLayout()        self.main_window.setLayout(buttons_layout)                for i in range(1, 13):            button = QPushButton(f"按钮{i}")            buttons_layout.addWidget(button)                self.main_window.show()if __name__ == "__main__":    app = QApplication(sys.argv)    welcome_window = WelcomeWindow()    welcome_window.show()    sys.exit(app.exec())现在,`WelcomeWindow`类有了一个名为`main_window`的属性,并且在`login`方法中使用`self.main_window`来引用它。这样,主窗体就不会闪现而过,而是会保持显示状态。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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