You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5开发密码生成器如何用单窗口替代两个QInputDialog弹窗

整合到主窗口的实现方案

核心思路是移除所有独立弹出的QInputDialog,直接通过布局管理器把输入控件、操作按钮、结果展示区全部放到主窗口内部,把原来初始化自动执行的生成逻辑绑定到按钮点击事件触发即可。

完整可运行代码

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,
                             QLabel, QSpinBox, QPushButton, QTextEdit)
import random

class App(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Password Generator')
        self.setGeometry(100,100, 400, 400)
        self.init_ui()
        self.show()

    def init_ui(self):
        # 主垂直布局
        main_layout = QVBoxLayout()

        # 密码数量输入行
        num_row = QHBoxLayout()
        num_label = QLabel("生成密码数量:")
        self.num_spin = QSpinBox()
        self.num_spin.setRange(1, 50) # 和原输入框范围一致 1-50
        self.num_spin.setValue(1)
        num_row.addWidget(num_label)
        num_row.addWidget(self.num_spin)
        main_layout.addLayout(num_row)

        # 密码长度输入行
        len_row = QHBoxLayout()
        len_label = QLabel("单条密码长度:")
        self.len_spin = QSpinBox()
        self.len_spin.setRange(1, 50) # 和原输入框范围一致 1-50
        self.len_spin.setValue(8)
        len_row.addWidget(len_label)
        len_row.addWidget(self.len_spin)
        main_layout.addLayout(len_row)

        # 生成按钮
        self.generate_btn = QPushButton("生成密码")
        self.generate_btn.clicked.connect(self.execute)
        main_layout.addWidget(self.generate_btn)

        # 结果展示区域
        self.result_area = QTextEdit()
        self.result_area.setReadOnly(True)
        main_layout.addWidget(self.result_area)

        self.setLayout(main_layout)

    def execute(self):
        char_set = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()-_,./?'
        num = self.num_spin.value()
        length = self.len_spin.value()
        result = []
        for _ in range(num):
            password = ''.join(random.choice(char_set) for _ in range(length))
            result.append(password)
            print(password)
        # 将结果展示到窗口内
        self.result_area.setPlainText('\n'.join(result))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

关键改动点

  • 删除了所有QInputDialog弹窗调用,所有交互控件都嵌入主窗口,程序启动后直接显示主界面,不会依次弹出输入框
  • 用QSpinBox做整数输入,自带数值范围限制,和原有逻辑的1-50取值约束完全匹配,无需额外写输入校验代码
  • 密码生成逻辑绑定到「生成密码」按钮的点击事件,用户可以反复调整参数多次生成,不需要重启程序
  • 新增只读文本区展示生成结果,不用切换到控制台查看输出

内容的提问来源于stack exchange,提问作者AmeriNam20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:01:07