제가 만든 앱의 위젯이 텍스트를 못 읽어옵니다........
-
게시물 수정 , 삭제는 로그인 필요
안녕하세요. 파이썬과 kivy를 통해, 간단한 회원가입 및 로그인 기능이 있는 GUI앱을 만들고 있습니다. 현재 제 앱의 큰 문제점은, 앱을 열자마자 로그인을 하려고 하면, 텍스트인풋 위젯들이 전~혀 문자열을 못 읽어온다는 것입니다... 혹시나 해서 sqlite 구문에 문제가 있는지 db파일도 살펴봤는데 전혀 문제가 없고 순진히 위젯의 문제였습니다... 어떻게 하면 처음 켤때부터 위젯이 문자열을 읽어오게 할까요???
<main.py>
"""
작성자 : 외기러기
작성일 : 2022-11-07
내가 만든 이 코드를 당신 또는 다른사람이 먼저 만들었다고 거짓말하지 마세요!!
"""
from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.screenmanager import Screen, ScreenManager
import sqlite3
#SQLite DB 인터페이스 클래스
class DBInterFace:
conn = sqlite3.connect("LoginApp.db", isolation_level=None)
cur = conn.cursor()
def __init__(self):
self.cur.execute("CREATE TABLE IF NOT EXISTS UserInfo(nickname text, mailaddr text, password text);")
def __del__(self):
self.conn.close()
def selectByNickPswd(self, nickname, password):
print("nickname :", nickname)
print("password :", password)
try:
self.cur.execute("SELECT ROWID FROM UserInfo WHERE nickname=? AND password=?", (str(nickname), str(password)))
result = self.cur.fetchone()
print("Select result :", result)
except Exception as err:
print("Select query failed :", str(err))
result = None
if result == None:
return result
else:
return result[0]
def insertNewMember(self, nickname, mailaddr, password):
print("nickname :", nickname)
print("mailaddr :", mailaddr)
print("password :", password)
#로그인 화면 클래스
class LoginScreen(AnchorLayout):
titleimage = ObjectProperty()
loginWin = ObjectProperty()
regWin = ObjectProperty()
nickname = ObjectProperty()
mailaddr = ObjectProperty()
password = ObjectProperty()
pswdagain = ObjectProperty()
def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
self.titleimage.bind(on_press=self.showLoginWin)
self.remove_widget(self.loginWin)
self.remove_widget(self.regWin)
def showLoginWin(self, *args):
self.titleimage.unbind(on_press=self.showLoginWin)
self.add_widget(self.loginWin)
self.remove_widget(self.regWin)
def login(self, *args):
result = LoginApp.dbinterface.selectByNickPswd(self.nickname.text, self.password.text)
if result != None:
LoginApp.screen_manager.current = "Main Screen"
else:
Popup(title="Login Failed!", content=Label(text="Your login has failed ;("), size_hint=(1, 0.2), auto_dismiss=True).open()
def showRegWin(self, *args):
self.remove_widget(self.loginWin)
self.add_widget(self.regWin)
def register(self, *args):
result = LoginApp.dbinterface.insertNewMember(self.nickname.text, self.mailaddr.text, self.password.text)
if result == None:
Popup(title="Registration Succeeded!", content=Label(text="You can login from now! :)"), size_hint=(1, 0.2), auto_dismiss=True).open()
else:
Popup(title="Registration Failed!", content=Label(text="Your registration has failed ;("), size_hint=(1, 0.2), auto_dismiss=True).open()
#로그인 이후 메인 화면 클래스
class MainScreen(AnchorLayout):
pass
#앱 전체를 나타내는 클래스
class LoginApp(App):
screen_manager = ScreenManager()
dbinterface = DBInterFace()
def build(self):
screen = Screen(name="Login Screen")
screen.add_widget(LoginScreen())
self.screen_manager.add_widget(screen)
screen = Screen(name="Main Screen")
screen.add_widget(MainScreen())
self.screen_manager.add_widget(screen)
return self.screen_manager
if __name__ == "__main__":
LoginApp().run()
<login.kv>
<LoginScreen>:
titleimage: titleimage
loginWin: loginWin
regWin: regWin
nickname: nickname
mailaddr: mailaddr
password: password
pswdagain: pswdagain
Button:
id: titleimage
size: root.height, root.width
background_normal: "login_image.jpg"
background_down: "login_image.jpg"
GridLayout:
id: loginWin
cols: 2
size_hint: 1, 0.2
background_color: "white"
Label:
text: "Nickname:"
width: 100
color: "black"
TextInput:
id: nickname
Label:
text: "Password:"
width: 100
color: "black"
TextInput:
id: password
Button:
id: loginbtn
text: "Login!"
on_press: root.login()
Button:
text: "Register"
on_press: root.showRegWin()
GridLayout:
id: regWin
cols: 2
size_hint: 1, 0.4
background_color: "white"
Label:
text: "Input nickname:"
width: 100
color: "black"
TextInput:
id: nickname
Label:
text: "Input mail address:"
width: 100
color: "black"
TextInput:
id: mailaddr
Label:
text: "Input password:"
width: 100
color: "black"
TextInput:
id: password
Label:
text: "Input password again:"
width: 100
color: "black"
TextInput:
id: pswdagain
Button:
text: "To login window"
on_press: root.showLoginWin()
Button:
text: "Register!"
on_press: root.register()
<MainScreen>:
Image:
source: "main_image.jpg"
size: root.height, root.width
<결과창>
PS C:\KivyApk\Login_App> & C:/Users/lje64/AppData/Local/Programs/Python/Python310/python.exe c:/KivyApk/Login_App/main.py [INFO ] [Logger ] Record log in C:\Users\lje64\.kivy\logs\kivy_22-11-07_46.txt [INFO ] [deps ] Successfully imported "kivy_deps.gstreamer" 0.3.3 [INFO ] [deps ] Successfully imported "kivy_deps.angle" 0.3.2 [INFO ] [deps ] Successfully imported "kivy_deps.glew" 0.3.1 [INFO ] [deps ] Successfully imported "kivy_deps.sdl2" 0.4.5
중략.......
[INFO ] [Base ] Start application main loop
[INFO ] [GL ] Unpack subimage support is available nickname : password : Select result : None [INFO ] [Base ] Leaving application in progress...
#제가 만든 이론입니다만 #제가 만든건데 안팔려요