import picklefrom tkinter import * import tkinter.messagebox Menu = Tk () Menu.resizable (width = False, height = False) Menu.state ('zoomed') Menu.title ("Gold Farm ") Пример = {" Test ":" Initial "} def database (): с open (" accounts.pickle "," rb ") как f: return pickle.load (f) accounts = database () usernameL = Label (text = "Имя пользователя:") usernameL.place (y = 300, x = 550) usernameB = Entry () usernameB.place (y = 300, x = 620) passwordL = Label (text = "Password:") passwordL. place (y = 330, x = 550) passwordB = Entry (show = "*") passwordB.place (y = 330, x = 620) eUsername = usernameB.get () ePassword = passwordB.get () def confirm () : для элемента в учетных записях: если eUsername в учетных записях и учетных записях [eUsername] == ePassword: print ("Correct") else: print ("False") Login = Button (text = "Login", command = confirm) Login.place (y = 350, x = 620)
Это мой код, который выполняет следующее:
- Запрашивает у пользователя имя пользователя и пароль в окне tkinter
- Устанавливает все, что они ввели как eUsername и ePassword
- Проверяет, правильно ли они получили пароль.
- Имейте в виду, что словарь «Пример» является примером того, что находится в файлах учетных записей
Проблема в том, что когда я ввожу правильное имя пользователя и пароль, он все равно возвращается как false. И поэтому; Мне нужна помощь в том, что я делаю неправильно , или что исправить.
Test
def databaseNew (): with open ("accounts.pickle", "wb ") как f: Entry = Setup [" me "] =" Tes "pickle.dump (Entry, f)
Вы не получаете никакого ввода в ваш код, если вы вызовете confirm ()
, вы увидите False
, поскольку вы повторяете каждое имя в dict с помощью для элемента в аккаунты
, сравнивая его с пустой строкой. Вы также можете упростить свою функцию, чтобы return accounts.get (eUsername) == ePassword
для проверки:
def confirm (): print ( account.get (eUsername) == ePassword)
Вам нужно упаковать ярлыки и т. д.
import picklefrom tkinter import * master = Tk () usernameL = Label (master, text = "Имя пользователя:") usernameL.pack () usernameB = Entry (master) usernameB.pack () passwordL = Label (master, text = "Пароль:") passwordL. pack () passwordB = Entry (master, show = "*") passwordB.pack () master.resizable (width = False, height = False) master.state ('normal') master.title ("Gold Farm") def database (): с open ("accounts.pickle", "rb") как f: return pickle.load (f) accounts = database () def confirm (): u, p = usernameB.get (), passwordB.get () if accounts.get (u) == p: print (True) # делаем все, что здесь еще: print (False) # неправильный вход m = messagebox.askretrycancel ("Invalid input") if not m: master.quit ( ) Login = Button (master, text = "Login", command = confirm) Login.place (y = 350, x = 620) Войти. pack () mainloop ()
Это грубый пример того, как добавлять новых пользователей к существующим dict и pickle, вы можете заполнить недостающую логику и привести в порядок дисплей с помощью все, что вы запланировали, и проверьте ввод:
import picklefrom tkinter import * master = Tk () usernameL = Label (master, text = "Username:") usernameL.pack () usernameB = Entry (master) usernameB.pack () passwordL = Label (master, text = "Пароль:") passwordL.pack () passwordB = Entry (master, show = "*") passwordB.pack () master.resizable ( width = False, height = False) master.state ('normal') master.title ("Gold Farm") def database (): with open ("accounts.pickle", "rb") as f: return pickle.load (f) accounts = database () def new (): u, p = usernameB.get (), passwordB.get (), если u в учетных записях: m = messagebox.askretrycancel («Недействительный», «Имя пользователя занято»), если нет m: master.quit () else: accounts [u] = p с open ("accounts.pickle", "wb") as f: pickle.dump (accounts, f) # do whatdef confirm (): u, p = usernameB.get (), passwordB.get (), если ccounts.get (u) == p: print (True) # делаем все, что здесь еще: print (False) # делаем что угодно, если логин неверный m = messagebox.askretrycancel ("Invalid input") if not m: master.quit ( ) Login = Button (master, text = "Login", command = confirm) Login.place (y = 350, x = 620) Login.pack () new_user = Button (master, text = "Create acc", command = new ) new_user.pack () mainloop ()
Python 3 - Открыть диалоговое окно файла в tkinter с помощью filedialog · GitHub
#! Python 3.4 | |
"" " | |
Откройте диалоговое окно файла в tkinter с помощью метода filedialog. | |
В Tkinter есть готовое диалоговое окно для доступа к файлам. | |
Этот пример разработан, чтобы показать, как вы можете использовать диалоговое окно файла задайте открытие имени файла | |
и используйте его в программе. | |
"" " | |
из tkinter import * | |
from tkinter import ttk | |
from tkinter.filedialog import askopenfilename | |
root = Tk () | |
# Здесь мы запускаем панель файлового менеджера. | |
def OpenFile (): | |
name = askopenfilename (initialdir = " C:/Users/Batman/Documents/Programming/tkinter/", | |
filetypes = ((" Текстовый файл " , "* .txt"), ("Все файлы", "*. *")), | |
title = "Выберите файл. " | |
) | |
print (name) | |
# Использование try в случае, если пользователь вводит неизвестный файл или закрывается без выбор файла. | |
попробуйте: | |
с open (name, 'r') как UseFile: | |
print (UseFile.read ()) | |
за исключением: | |
print («Файл не существует») | |
Title = root.title ("Средство открытия файла") | |
label = ttk.Label (root, text = "Я БЭТМЕН !!!", foreground = "red", font = ("Helvetica", 16)) | |
label.pack () | |
# Панель меню | |
menu = Меню (корень) | |
root.config (menu = menu) | |
file = Меню (меню) | |
file.add_command (label = 'Open', command = OpenFile) | |
file.add_command (label = 'Exit', command = lambda: exit ()) | |
menu.add_cascade (label = 'Файл', меню = файл) | |
root.mainloop () | |
'' ' | |
РЕЗУЛЬТАТЫ: | |
>>> | |
C:/Users/Scott/Documents/Programming/json/test.txt | |
"Мне нравится м над ним, протрите его! " | |
'' ' |