私はKivyには新しいですが、Tkinterを使用してインベントリプログラムを作成しました。Python-Kivy:Pythonメソッドを使用して画面を変更します(Kivyコードで作成されたネストされたスクリーンマネージャ)
私はKivyを使用してインベントリプログラムを作成していますが、最初にログイン画面をユーザ名(唯一)のTextInputボックスで作成し、on_text_verifyを使用して最終的にユーザ名を今のところは、ネストされたScreenManagerを含むものに画面を変更するメソッド(Pythonコードで)を実行するようにしようとしています。
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のコードは次のとおりです。
<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の中でやろうとしていることをやって、まっすぐなpython関数を呼び出すことができることを指摘したい。 – Afflicted
問題は、kvからPython関数を呼び出すことだと思います。画面を変更する関数を呼び出すたびに何も起こりません。将来、この同じ関数はユーザ名をmysqlデータベースと照合し、検証されれば画面を切り替えますが、少なくとも画面を切り替えるためには必要です。ありがとう! – Mrhankycowdog
したがって、.kvを使用している間はまっすぐなpythonで画面を切り替えることはできますが、それは汚いです。 .kvを使用しているときにこれを行うには、今設定した方法が最良の方法です。長時間の目標がユーザー名を取得して確認してから、画面を切り替えることです。あなたがすることができるのは、.kvの中にbool変数を投げることだけです。それをfalseに設定し、ユーザがユーザ名を入力したら、正しいと仮定してフラグをtrueに切り替えて画面を変更することができます。どうやって?テキストを確認するためにあなたの呼び出しでそれを行います。例えば、on_text_validate()の中で。それ以外の場合は、.kv言語を削除する場合は、@ Qback – Afflicted