wsh_wshkk 2024-06-28 17:45 采纳率: 72.4%
浏览 5
已结题

python的tkinter的两个模块结合的问题

我想要出现的顺序是
先出现用户登录

img


然后输入用户名和密码,登陆成功

img


然后在选择,之后出现

img

然后我有两个.py文件
第一个是a.py


import tkinter as tk
from tkinter import messagebox
import user_password
# 定义全局变量的用户密码字典
userpass = {}

# 读取文件存入字典
def readfile():
    global userpass
    temp = []
    with open('user', 'r', encoding='utf-8') as f:
        lines = f.readlines()
    for line in lines:
        key, value = line.split()
        userpass[key] = value


def root_1(root):
    # 用户名
    username_label = tk.Label(root, text="用户名")
    username_label.grid(row=0, column=0, padx=10, pady=10)
    username_entry = tk.Entry(root, width=40)  # 设置宽度为20个字符
    username_entry.grid(row=0, column=1, padx=0, pady=10)

    # 密码
    password_label = tk.Label(root, text="密   码")
    password_label.grid(row=1, column=0, padx=10, pady=10)
    password_entry = tk.Entry(root, show="*", width=40)  # 设置宽度为20个字符
    password_entry.grid(row=1, column=1, padx=10, pady=10)

    # 取消按钮
    cancel_button = tk.Button(root, text="取消", command=on_cancel)
    cancel_button['width'] = 15
    cancel_button.grid(row=2, column=0, padx=10, pady=10, sticky="w")

    # 登录按钮
    login_button = tk.Button(root, text="登录", command=lambda: on_login(username_entry, password_entry))
    login_button['width'] = 15  # 设置按钮宽度
    login_button.grid(row=2, column=1, padx=10, pady=10, sticky="e")

    root.mainloop()

# 登录
def on_login(username_entry, password_entry):
    global userpass
    username = username_entry.get()
    password = password_entry.get()
    if username in userpass and userpass[username] == password:
        messagebox.showinfo("提示", "登录成功")
        root.destroy()
        show_1()
    else:
        messagebox.showerror("错误", "用户名或密码错误")


def show_1():
    show=tk.Toplevel(root)
    show.title("超市关系系统目录")
    cancel_button = tk.Button(root, text='用户管理', command=user_password.root_2(user_password.root2))
    cancel_button['width'] = 15
    cancel_button.grid(row=2, column=0, padx=10, pady=10, sticky="w")
    show.mainloop()

# 取消按钮
def on_cancel():
    root.quit()

root = tk.Tk()
root.title("超市管理系统登录")
root.geometry("500x150+650+80")  # 创建窗口大小
readfile()
print(userpass)
root_1(root)


以及代码块user_password.py

import tkinter as tk
from tkinter import messagebox

# 定义全局变量的用户密码字典
userpass = {}
root2 = tk.Tk()
root2.title("密码管理")
root2.geometry("300x200+650+80")

# 读取文件存入字典
def readfile():
    global userpass
    temp = []
    with open('user', 'r', encoding='utf-8') as f:
        lines = f.readlines()
    for line in lines:
        key, value = line.split()
        userpass[key] = value


# 添加新的管理人员
def add_user():
    global userpass
    print(userpass)
    add = tk.Toplevel(root2)
    add.title("添加用户")
    add.geometry("400x150+650+80")
    #用户名
    username_label = tk.Label(add, text="用户名")
    username_label.grid(row=0, column=0, padx=10, pady=10)
    username_entry = tk.Entry(add, width=40)  # 设置宽度为40个字符
    username_entry.grid(row=0, column=1, padx=0, pady=10)
    # 密码
    password_label = tk.Label(add, text="密   码")
    password_label.grid(row=1, column=0, padx=10, pady=10)
    password_entry = tk.Entry(add, width=40)
    password_entry.grid(row=1, column=1, padx=10, pady=10)

    #用来点击提交后,对用户输入的读取
    def submit_d():
        username = username_entry.get()
        password = password_entry.get()
        if username in userpass:
            messagebox.showerror("错误", "用户名重复,请重新输入")
            add.destroy()
            add_user()
        elif username and password:
            userpass[username] = password
            messagebox.showinfo("提示", "用户添加成功")
            add.destroy()
        else:
            messagebox.showerror("错误", "用户名或密码不能为空")
            add.destroy()
            add_user()

    # 提交按钮
    submit = tk.Button(add, text="提交", command=submit_d)
    submit['width'] = 15
    submit.grid(row=2, column=1, padx=10, pady=10, sticky="e")

    add.mainloop()
    root2.destroy()  # 关闭根窗口
    print(userpass)

#修改密码
def change_user():
    global userpass
    # 用户名
    change = tk.Toplevel(root2)
    change.title("修改密码")
    change.geometry("400x200+650+80")
    username_label = tk.Label(change, text="用户名")
    username_label.grid(row=0, column=0, padx=10, pady=10)
    username_entry = tk.Entry(change, width=40)  # 设置宽度为40个字符
    username_entry.grid(row=0, column=1, padx=0, pady=10)
    # 密码
    o_password_label = tk.Label(change, text="旧密码")
    o_password_label.grid(row=1, column=0, padx=10, pady=10)
    o_password_entry = tk.Entry(change, width=40)
    o_password_entry.grid(row=1, column=1, padx=10, pady=10)
    n_password_label = tk.Label(change, text="新密码")
    n_password_label.grid(row=2, column=0, padx=10, pady=10)
    n_password_entry = tk.Entry(change, width=40)
    n_password_entry.grid(row=2, column=1, padx=10, pady=10)

    # 用来点击提交后,对用户输入的读取
    def submit_d():
        username = username_entry.get()
        n_password = n_password_entry.get()
        o_password = o_password_entry.get()
        if username not in userpass:
            messagebox.showerror("错误", "用户名无效")
            change_user()
        elif username and n_password and o_password:
            if userpass[username] == o_password:
                userpass[username] = n_password
                messagebox.showinfo("提示", "用户密码修改成功")
                change.destroy()
            else:
                messagebox.showerror("错误", "旧密码不正确")
                change.destroy()
                change_user()
        else:
            messagebox.showerror("错误", "用户名或密码不能为空")
            change.destroy()
            change_user()

    # 提交按钮
    submit = tk.Button(change, text="提交", command=submit_d)
    submit['width'] = 15
    submit.grid(row=3, column=1, padx=10, pady=10, sticky="e")

    change.mainloop()
    root2.destroy()

#取消按钮
def on_cancel():
    global userpass
    root2.quit()
    with open('user', 'w') as file:
        for key, value in userpass.items():
            file.write(f"{key} {value}\n")

def root_2(root):
    # 为了让下面两个按钮居中而设置
    label = tk.Label(text='              ')
    label.grid(row=1, column=0, padx=10, pady=15)

    adduser = tk.Button(root, text='添加新用户', command=add_user)
    adduser['width'] = 15
    adduser.grid(row=1, column=1, padx=10, pady=15)

    changeuser = tk.Button(root, text='修改密码', command=change_user)
    changeuser['width'] = 15
    changeuser.grid(row=2, column=1, padx=10, pady=15)

    break_2 = tk.Button(root, text='退出', command=on_cancel)
    break_2['width'] = 15
    break_2.grid(row=3, column=1, padx=10, pady=15)

    root.mainloop()


readfile()
# 创建一个根界面:密码管理界面
root_2(root2)



但是我现在运行a.py
现在出现的顺序是

img


把这个叉掉之后,才会出现原本该第一个出现,之后显示登陆成功之后就直接结束程序了,到底该怎么改正呀

  • 写回答

1条回答

  • 2201_75335496 2024-06-28 18:01
    关注

    只要删除import user_password这行代码应该就可以了,或者在user_password文件里面都用类或者函数装起来,那样就不会在导入的时候运行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月28日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。