编程新小白 2024-03-07 17:15 采纳率: 33.3%
浏览 2

请问下python创建窗口的问题

我现在有个问题,想请教一下创建窗口、创建弹窗之类的问题
我目前懂得创建窗口

import tkinter as tk

window = tk.Tk()

window.geometry("400x400")

window..mainloop()

但是想要设置一个按钮,希望位置偏向中间,点击按钮会响应一个弹窗弹窗里有两个不紧凑的文本框(类似登录页),想要在设置程序上输入正确的“账号”和“密码”然后成功跳转新的窗口,请问该怎么弄啊。
知道按钮 可以通过botton来解决,但是对这个还不太了解,我不会调位置,对于按钮响应也不太了解,希望有所解答。

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-07 17:15
    关注

    引自免费微信小程序:皆我百晓生

    当然,我很乐意帮助你解决这个问题。以下是一个使用tkinter创建带有按钮、弹窗以及输入验证功能的简单示例代码:

    import tkinter as tk
    from tkinter import messagebox
    
    # 创建主窗口
    window = tk.Tk()
    window.geometry("400x400")
    window.title("登录界面")
    
    # 定义居中显示函数
    def center_window(root):
        window_width = root.winfo_reqwidth()
        window_height = root.winfo_reqheight()
        position_right = int(window.winfo_screenwidth() / 2 - window_width / 2)
        position_down = int(window.winfo_screenheight() / 2 - window_height / 2)
        root.geometry("+{}+{}".format(position_right, position_down))
    
    center_window(window)
    
    # 创建一个居中的按钮
    def popup_login():
        top = tk.Toplevel(window)
        top.title("登录")
        
        # 设置弹窗大小和位置居中
        top.geometry("300x150")
        center_window(top)
    
        # 创建账号和密码输入框
        account_label = tk.Label(top, text="账号:", font=("Arial", 12))
        account_entry = tk.Entry(top, show="*", width=20)
        
        password_label = tk.Label(top, text="密码:", font=("Arial", 12))
        password_entry = tk.Entry(top, show="*", width=20)
    
        # 按钮布局及定位
        account_label.grid(row=0, column=0, padx=10, pady=10)
        account_entry.grid(row=0, column=1, padx=10, pady=10)
        password_label.grid(row=1, column=0, padx=10, pady=10)
        password_entry.grid(row=1, column=1, padx=10, pady=10)
    
        # 创建登录按钮,并设置点击事件
        login_button = tk.Button(top, text="登录", command=lambda: check_credentials(account_entry, password_entry))
        login_button.grid(row=2, columnspan=2, padx=10, pady=10)
    
    # 登录验证函数
    def check_credentials(account_entry, password_entry):
        account = account_entry.get()
        password = password_entry.get()
    
        # 这里仅做简单的字符串匹配模拟验证过程,实际应用中应连接数据库进行验证
        correct_account = "正确账号"
        correct_password = "正确密码"
    
        if account == correct_account and password == correct_password:
            messagebox.showinfo("提示", "登录成功!")
            new_window = tk.Toplevel(window)
            new_window.title("新窗口")
            # 新窗口内容...
        else:
            messagebox.showerror("错误", "账号或密码错误,请重新输入。")
    
    # 在主窗口上创建并定位登录按钮
    login_button_main = tk.Button(window, text="点击登录", command=popup_login)
    login_button_main.pack(pady=50, padx=50)
    
    # 启动主窗口循环
    window.mainloop()
    

    这段代码首先定义了一个主窗口,并在其中添加了一个按钮,当点击该按钮时会弹出一个新的登录窗口。登录窗口有两个文本框用于输入账号和密码,还有一个登录按钮。点击登录按钮后,将调用check_credentials函数进行验证,如果输入的账号和密码与预设的“正确账号”和“正确密码”相匹配,则显示一个消息框告知用户登录成功,并打开一个新的窗口(这里仅做了标题设置,实际可以填充其他内容)。如果不匹配,则显示错误消息。

    注意,这里的账号和密码校验是基于硬编码的示例值,实际项目中需要替换为从数据库查询或其他验证逻辑。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月7日

悬赏问题

  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?