试图了解猕猴桃。
在一个涉及几个屏幕的简单应用程序上工作。目前,我正在尝试从...中的on_release按钮调用弹出窗口,但没有成功。 错误:
Traceback (most recent call last):
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\lang\builder.py", line 725, in _apply_rule
raise AttributeError(key)
AttributeError: release
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/thoma/PycharmProjects/FacesGUI/main.py", line 36, in <module>
kv = Builder.load_file("my.kv")
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\lang\builder.py", line 301, in load_file
return self.load_string(data, **kwargs)
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\lang\builder.py", line 405, in load_string
rule_children=rule_children)
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\lang\builder.py", line 657, in _apply_rule
root=rctx['ids']['root'], rule_children=rule_children)
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\uix\widget.py", line 469, in apply_class_lang_rules
rule_children=rule_children)
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\lang\builder.py", line 538, in apply
rule_children=rule_children)
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\lang\builder.py", line 734, in _apply_rule
'{}: {}'.format(e.__class__.__name__, e), cause=tb)
kivy.lang.builder.BuilderException: Parser: File "C:\Users\thoma\PycharmProjects\FacesGUI\my.kv", line 100:
...
98: center_x: self.parent.center_x
99: center_y: self.parent.center_y
>> 100: on_release: root.show_popup()
101:
102:
...
AttributeError: release
File "C:\Users\thoma\PycharmProjects\FacesApp\venv\lib\site-packages\kivy\lang\builder.py", line 725, in _apply_rule
raise AttributeError(key)
我尝试使用root,app,self进行调用,并创建MyMainApp()实例并将其传入。????????
我注意到有些用户建议在.py中使用构建器字符串,而其他用户则建议使用.kv文件进行布局等。
彼此之间的优缺点是什么???虽然我习惯于xml布局和java / kotlin类的逻辑,但是使用.kv有点令人困惑。
my.kv
<P>:
Label:
text: "Eneter Name or Type 'skip':"
TextInput:
text: ""
Button:
text: "Submit"
WindowManager:
MainWindow:
SecondWindow:
<MainWindow>:
name: "main"
GridLayout:
cols:2
Button:
text:"Live Camera"
on_press: root.activatecamera()
Button:
text:"SD Card"
on_press: root.sdcard()
Button:
text:"Event Images"
on_press: root.viewEventImages()
Button:
text:"Event Faces"
on_release:
app.root.current = "eventfaces"
root.manager.transition.direction = "left"
Button:
text:"List Names"
on_press: root.listknownfaces()
Button:
text:"View Log"
on_press: root.pipeout()
Button:
text:"Scan Directory"
on_press: root.scanDirectory()
Button:
text:"Facial Recognition on Image"
on_press: root.metadataRead()
Button:
text:"Label Image"
on_press: root.metadataRead()
Button:
text:"Blur Faces"
on_press: root.metadataRead()
Button:
text: "Metadata"
on_release:
app.root.current = "second" if passw.text == "tim" else "main"
root.manager.transition.direction = "left"
Button:
text: "Misc."
on_release:
app.root.current = "second" if passw.text == "tim" else "main"
root.manager.transition.direction = "left"
<SecondWindow>:
name: "eventfaces"
GridLayout:
cols:1
rows:2
GridLayout:
cols:4
Button:
id: myButton
Image:
source: "unnamed/unnamed1.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
on_release: root.show_popup()
Button:
id: myButton
Image:
source: "unnamed/unnamed2.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed3.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed4.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed5.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed6.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed7.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed8.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed9.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed10.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
id: myButton
Image:
source: "unnamed/unnamed11.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
Button:
text: "Main Menu"
on_release:
app.root.current = "main"
root.manager.transition.direction = "left"
main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.popup import Popup
class P(BoxLayout):
pass
class MainWindow(Screen):
pass
class SecondWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
def show_popup():
show = P() # Create a new instance of the P class
popupWindow = Popup(title="Enter Name or Type 'skip': ", content=show, size_hint=(None, None), size=(400, 400))
# Create the popup window
popupWindow.open() # show the popup
kv = Builder.load_file("my.kv")
class MyMainApp(App):
def build(self):
return kv
if __name__ == "__main__":
MyMainApp().run()
如果有人可以指导我是否应该使用Builder字符串处理或.kv,和/或我如何创建带有标签,textinput和button以及从button调用的弹出窗口,将不胜感激。
我认为.py文件有关结构的错误。我曾尝试将def show_popup()移入SecondWindow类,如在示例中看到的那样,但没有成功。
是否需要将def分配给每个窗口?还是可以从窗口类之外调用它们?
先谢谢了。我知道这是一篇很简单的任务的漫长帖子。 :/
答案 0 :(得分:2)
on_release:
不支持Image
参数。您需要将其移至Button
:
Button:
id: myButton
on_release: root.show_popup()
Image:
source: "unnamed/unnamed1.jpg"
center_x: self.parent.center_x
center_y: self.parent.center_y
此外,请注意,id
只能引用一个Widget
,因此myButton
id
将仅引用具有该{{1 }}。