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

如何在Python中实现类似PowerShell Get-Credential的美观凭据请求功能?

在Python中实现类似PowerShell Get-Credential的美观凭据请求功能

当然可以,除了原生tkinter,有几个更美观的实现方案,分场景给你参考:

1. 用CustomTkinter实现现代风格GUI凭据框

CustomTkinter是Tkinter的美化分支,自带现代主题,不用复杂配置就能做出好看的界面,和原生Tkinter语法兼容,改起来成本低。

示例代码:

import customtkinter as ctk

def get_credential():
    ctk.set_appearance_mode("System")  # 跟随系统主题
    ctk.set_default_color_theme("blue")  # 可选主题:blue/green/dark-blue

    app = ctk.CTk()
    app.title("Enter Credentials")
    app.geometry("350x200")

    # 用户名输入
    username_label = ctk.CTkLabel(app, text="Username:")
    username_label.pack(pady=(20, 5))
    username_entry = ctk.CTkEntry(app, width=280)
    username_entry.pack(pady=(0, 15))

    # 密码输入
    password_label = ctk.CTkLabel(app, text="Password:")
    password_label.pack(pady=(0, 5))
    password_entry = ctk.CTkEntry(app, width=280, show="*")
    password_entry.pack(pady=(0, 20))

    # 确认按钮逻辑
    credentials = {}
    def on_submit():
        credentials["username"] = username_entry.get()
        credentials["password"] = password_entry.get()
        app.quit()

    submit_btn = ctk.CTkButton(app, text="OK", command=on_submit)
    submit_btn.pack()

    app.mainloop()
    app.destroy()
    return credentials

# 使用示例
creds = get_credential()
if creds["username"] and creds["password"]:
    print(f"Username: {creds['username']}")
    # 注意:实际场景不要明文打印密码

2. 用PyQt6/PySide6实现原生系统风格对话框

PyQt/PySide的对话框会自动适配系统原生样式(Windows/macOS/Linux),视觉上更贴合系统,体验更好。

示例代码(PyQt6):

from PyQt6.QtWidgets import (QApplication, QInputDialog, QWidget)
import sys

def get_credential():
    app = QApplication(sys.argv)
    # 获取用户名
    username, ok_username = QInputDialog.getText(QWidget(), "Enter Credentials", "Username:")
    if not ok_username or not username:
        return None
    
    # 获取密码(隐藏输入)
    password, ok_password = QInputDialog.getText(
        QWidget(), "Enter Credentials", "Password:", 
        echo=QInputDialog.EchoMode.Password
    )
    if not ok_password or not password:
        return None
    
    return {"username": username, "password": password}

# 使用示例
creds = get_credential()
if creds:
    print(f"Username: {creds['username']}")

如果想要更接近PowerShell Get-Credential的合并对话框,可以自定义QDialog:

from PyQt6.QtWidgets import (QApplication, QDialog, QLabel, QLineEdit, QPushButton, QVBoxLayout)
import sys

class CredentialDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Enter Credentials")
        self.layout = QVBoxLayout()

        self.username_label = QLabel("Username:")
        self.username_input = QLineEdit()
        self.password_label = QLabel("Password:")
        self.password_input = QLineEdit()
        self.password_input.setEchoMode(QLineEdit.EchoMode.Password)

        self.ok_btn = QPushButton("OK")
        self.ok_btn.clicked.connect(self.accept)
        self.cancel_btn = QPushButton("Cancel")
        self.cancel_btn.clicked.connect(self.reject)

        self.layout.addWidget(self.username_label)
        self.layout.addWidget(self.username_input)
        self.layout.addWidget(self.password_label)
        self.layout.addWidget(self.password_input)
        self.layout.addWidget(self.ok_btn)
        self.layout.addWidget(self.cancel_btn)
        self.setLayout(self.layout)

def get_credential():
    app = QApplication(sys.argv)
    dialog = CredentialDialog()
    if dialog.exec():
        return {
            "username": dialog.username_input.text(),
            "password": dialog.password_input.text()
        }
    else:
        return None

# 使用示例
creds = get_credential()
if creds:
    print(f"Username: {creds['username']}")

3. 控制台环境下的无GUI实现

如果不需要GUI,只在控制台交互,用标准库的getpass模块就能实现,和PowerShell的控制台版Get-Credential效果一致:

import getpass

def get_credential():
    username = input("Username: ")
    password = getpass.getpass("Password: ")
    return {"username": username, "password": password}

# 使用示例
creds = get_credential()
print(f"Username: {creds['username']}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:35:05