저는 Kivy에 새로운 것이지만 Tkinter를 사용하여 인벤토리 프로그램을 만들었습니다.Python-Kivy : Python 메서드를 사용하여 화면 변경 (Kivy 코드에서 생성 된 중첩 된 화면 관리자)
나는 Kivy를 사용하여 인벤토리 프로그램을 만들고 사용자 이름 (단)에 대한 TextInput 상자가있는 로그인 화면을 먼저 가질 계획이며, on_text_verify를 사용하여 사용자 이름을 확인하는 메소드를 실행하고 싶습니다. 데이터베이스,하지만 지금은 중첩 된 ScreenManager를 포함하는 화면으로 변경하는 메서드를 (파이썬 코드에서) 실행하도록 시도하고 있습니다.
KV 코드를 사용하여 화면을 변경하는 방법을 알고 있지만 데이터베이스에서 사용자 이름을 확인해야하므로 대신 사용자 이름이 수락되면 Python 메서드를 실행해야합니다. , 화면을 변경하십시오. 여기
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
## I have imported all of these as I have been trying out different things ##
class LoginScreen(Screen):
pass
class MainScreen(Screen):
pass
class ScanScreen(Screen):
pass
class InventoryScreen(Screen):
pass
class ItemsScreen(Screen):
pass
class LogsScreen(Screen):
pass
class AlertsScreen(Screen):
pass
class HelpScreen(Screen):
pass
class MainWindow(FloatLayout):
def __init__(self, **kwargs):
super(MainWindow, self).__init__(**kwargs)
def goto_Mainscr(self):
self.current="Mainscr"
class Invtest3App(App):
def build(self):
return MainWindow()
if __name__ == '__main__':
Invtest3App().run()
는 KV 코드 : 여기에 지금까지 무엇을 당신이 KV를 사용하지 않고 화면을 관리하려면
<MainWindow>:
orientation: 'vertical'
name: "mainw"
id: mw
ScreenManager:
id: loginsm
LoginScreen:
MainScreen:
<ScanScreen>:
name: "Scan"
Button:
text: "Scan In"
pos_hint: {"x": 0, 'y': 0}
size_hint: 1.0/5.0, 0.1
Button:
text: "Scan Out"
pos_hint: {"x": 1.0/5.0, 'y': 0}
size_hint: 1.0/5.0, 0.1
Button:
text: "Event"
pos_hint: {"x": 2.0/5.0, 'y': 0}
size_hint: 1.0/5.0, 0.1
Button:
text: "Recount"
pos_hint: {"x": 3.0/5.0, 'y': 0}
size_hint: 1.0/5.0, 0.1
Button:
text: "Logout"
pos_hint: {"x": 4.0/5.0, 'y': 0}
size_hint: 1.0/5.0, 0.1
on_press: app.root.ids.loginsm.current = 'Loginscr'
<InventoryScreen>:
name: "Inventory"
Label:
text: "Inventory Screen"
<ItemsScreen>:
name: "Items"
Label:
text: "Items Screen"
<LogsScreen>:
name: "Logs"
Label:
text: "Logs Screen"
<AlertsScreen>:
name: "Alerts"
Label:
text: "Alerts Screen"
<HelpScreen>:
name: "Help"
Label:
text: "Help Screen"
<LoginScreen>:
name: "Loginscr"
id: loginscr
Label:
name: "loginlabel"
text: "Scan ID Barcode or Enter V# and Press Enter"
pos_hint: {"center_x": .5, "center_y": .5}
TextInput:
hint_text: "Scan ID Barcode or Enter V# and Press Enter"
id: login_input
size_hint: 0.2, 0.1
pos_hint: {"center_x": .5, "center_y": 0.2}
multiline: False
focus: True
on_text_validate: app.root.goto_Mainscr; self.text=""
#app.root.goto_Mainscr
#app.root.ids.loginsm.current = "Mainscr"
<MainScreen>:
name: "Mainscr"
FloatLayout:
pos_hint: {'top': 1}
size_hint: 1, 0.1
Button:
name: "scanButton"
text: "Scan"
pos_hint: {'x': 0, 'y': 0}
size_hint: 1.0/6.0, 1
on_press: root.ids.sm.current = "Scan"
Button:
name: "inventoryButton"
text: "Inventory"
pos_hint: {'x': 1.0/6.0, 'y': 0}
size_hint: 1.0/6.0, 1
on_press: root.ids.sm.current = "Inventory"
Button:
name: "itemsButton"
text: "Items"
pos_hint: {'x': 2.0/6.0, 'y': 0}
size_hint: 1.0/6.0, 1
on_press: root.ids.sm.current = "Items"
Button:
name: "logsButton"
text: "Logs"
pos_hint: {'x': 3.0/6.0, 'y': 0}
size_hint: 1.0/6.0, 1
on_press: root.ids.sm.current = "Logs"
Button:
name: "alertsButton"
text: "Alerts"
pos_hint: {'x': 4.0/6.0, 'y': 0}
size_hint: 1.0/6.0, 1
on_press: root.ids.sm.current = "Alerts"
Button:
name: "helpButton"
text: "Help"
pos_hint: {'x': 5.0/6.0, 'y': 0}
size_hint: 1.0/6.0, 1
on_press: root.ids.sm.current = "Help"
FloatLayout:
ScreenManager:
id: sm
pos_hint: {'top': 0.9}
size_hint: 1, 0.9
ScanScreen:
InventoryScreen:
ItemsScreen:
LogsScreen:
AlertsScreen:
HelpScreen:
나는 이것이 답변이 아닌 이유 인 귀하의 질문을 이해합니다. 나는 당신이 .kv 안에서하려고하는 것을 할 수 있고 여전히 똑바로 파이썬 함수를 호출 할 수 있다는 것을 지적하고 싶다. – Afflicted
문제는 kv에서 파이썬 함수를 호출하는 것입니다. 화면을 변경하는 함수를 호출 할 때마다 아무 일도 일어나지 않습니다. 앞으로이 동일한 함수는 mysql 데이터베이스에 대해 사용자 이름을 먼저 검사 할 것이고, 유효성이 확인되면 화면을 전환 할 것입니다.하지만 적어도 화면을 전환하거나 아니면 무엇이든 할 필요가 있습니다. 감사! – Mrhankycowdog
.kv를 사용하는 동안 똑바로 파이썬으로 화면을 전환 할 수 있지만 더러워졌습니다. 지금 설정 한 방법은 .kv를 사용하는 동안 그것을하는 가장 좋은 방법입니다. 장기 목표가 사용자 이름을 확인하고 확인한 다음 화면을 전환하는 것입니다. 당신이 할 수있는 일은 .kv 안에 bool 변수를 던져 넣는 것입니다. false로 설정하면 사용자가 사용자 이름을 입력하면 올바른 것으로 가정하고 플래그를 true로 전환하고 화면을 변경할 수 있습니다. 방법? 전화를 걸어 텍스트를 확인하십시오. 예를 들어 on_text_validate()에 있습니다. 그렇지 않은 경우 .kv 언어를 삭제하려면 @Qback – Afflicted