致相关人士
我有一个Python类,它包含一个数据库,并具有我所需要的所有功能-全部从命令提示符检查。现在,我正在尝试围绕它构建一个Kivy shell,以使它更加用户友好和视觉愉悦。你知道吗
我通过将数据库类的一个实例定义为全局对象来进行管理,因此尽管我已经完成了任务,但我一点也不高兴。我知道,人们应该避免全局变量而不是瘟疫。你知道吗
有人能给我一个解决办法吗?在哪里定义数据库的第一个实例,以及如何在小部件之间传递它?你知道吗
我在下面展示了我的程序的一个显著缩减的框架,以供讨论,这将有希望得到发展。你知道吗
你知道吗主.py地址:
from kivy.app import App
from rootwidget import *
from mainmenu import *
from editentry import *
from database import * # <----= import the database class I want to work on
from kivy.lang import Builder
Builder.load_file("rootwidget.kv")
Builder.load_file("mainmenu.kv")
Builder.load_file("editentry.kv")
class DataBaseApp(App):
def build(self):
return RootWidget()
if __name__ == '__main__' :
DataBaseApp().run()
这里所有的东西都是标准的Python/Kivy编码,除了导入我的数据库的import database
。数据库也被剥离了:
你知道吗数据库.py地址:
class DataBase:
entries = []
我有三个小部件,rootwidget
(ScreenManager
)和两个子部件(类型为Screen
)、mainmenu
和editentry
。你知道吗
它们的定义如下:
你知道吗rootwidget.kv电压地址:
#: kivy 1.9.0
<RootWidget>:
name: "RootWidget_ScreenManager"
MainMenu:
EditEntry:
以及根控件.py地址:
from kivy.uix.screenmanager import ScreenManager
class RootWidget(ScreenManager):
pass
你知道吗主菜单.kv地址:
#: kivy 1.9.0
<MainMenu>:
name: "MainMenu_Screen"
BoxLayout:
orientation: "vertical"
Label:
text: "Main Menu"
Button:
text: "Go to I/O"
on_release:
root.manager.transition.direction = "left"
root.manager.current = "EditEntry_Screen"
你知道吗主菜单.py地址:
from kivy.uix.screenmanager import Screen
class MainMenu(Screen):
pass
你知道吗editentry.kv电压地址:
#: kivy 1.9.0
<EditEntry>:
name: "EditEntry_Screen"
BoxLayout:
orientation: "vertical"
Label:
text: "Edit Entry"
Button:
text: "Go back to main menu"
on_release:
root.manager.transition.direction = "right"
root.manager.current = "MainMenu_Screen"
以及编辑条目.py地址:
from kivy.uix.screenmanager import Screen
class EditEntry(Screen):
pass
因此,我的问题是:在哪里实例化DataBase
类?我做了几次尝试,一次是在App
级别创建第一个实例,然后将它作为参数传递给RootWidget
的构造函数。这是有效的,但我无法将它从RootWidget
传递给它的子MainMenu
和EditEntry
。在RootWidget
级别定义它并没有多大帮助,因为我仍然无法将它传递给它的子级。如果我在子级定义它,我就不能从一个子级传递到另一个子级,比如从MainMenu
到EditEntry
。你知道吗
任何建议/帮助都将不胜感激
干杯
目前没有回答
相关问题 更多 >
编程相关推荐