python - 如何将我的应用程序上的工具栏与 Python 中的 Kivy 集成?
问题描述
我今天来找你是因为我已经好几天没能解决我的问题了。
我正在尝试做的事情:
我想在我的应用程序一侧创建一个 ToolBar 并使其在我的所有屏幕上都可用。我尝试了几件事,但没有任何结果:(我会给你一些我的代码,看看我做了什么。
[我在这里删除了代码,因为我在下面更改了我的代码]
提前感谢您的帮助,我可以提供更多信息。祝你有美好的一天!
消息:
我只是尝试按照@Erik 的建议去做,但是在启动程序时出现错误。
错误
Traceback (most recent call last):
File "/Users/maelito/Desktop/tradingApp/app.py", line 1, in <module>
from gui import window as w
File "/Users/maelito/Desktop/tradingApp/gui/__init__.py", line 4, in <module>
app.run()
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/app.py", line 799, in run
self.load_kv(filename=self.kv_file)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/app.py", line 596, in load_kv
root = Builder.load_file(rfilename)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/builder.py", line 301, in load_file
return self.load_string(data, **kwargs)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/builder.py", line 368, in load_string
parser = Parser(content=string, filename=fn)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/parser.py", line 392, in __init__
self.parse(content)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/parser.py", line 498, in parse
self.execute_directives()
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/parser.py", line 452, in execute_directives
kivy.lang.builder.Builder.load_file(ref)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/builder.py", line 301, in load_file
return self.load_string(data, **kwargs)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/builder.py", line 368, in load_string
parser = Parser(content=string, filename=fn)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/parser.py", line 392, in __init__
self.parse(content)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/parser.py", line 501, in parse
objects, remaining_lines = self.parse_level(0, lines)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/parser.py", line 605, in parse_level
level + 1, lines[i:], spaces)
File "/Users/maelito/env/lib/python3.7/site-packages/kivy/lang/parser.py", line 664, in parse_level
if current_property[:3] == 'on_':
TypeError: 'NoneType' object is not subscriptable
所以我也和你分享新代码。(我在 screen1.kv 和 screen2.kv 中没有任何改变)。
窗口.py
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import Screen
from kivy.factory import Factory
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager
class ToolBar(GridLayout):
pass
class Screen1(Screen):
pass
class Screen2(Screen):
pass
class WindowInterface(GridLayout):
manager = ScreenManager()
toolbar = ToolBar()
screen_1 = Screen1()
screen_2 = Screen2()
screen_1.add_widget(toolbar)
screen_2.add_widget(toolbar)
manager.add_widget(screen_1)
manager.add_widget(screen_2)
def construct_toolbar(self):
self.toolbar.add_buttons(self)
class Window(App):
pass
窗口.kv
#:include gui/kv_files/screen_1.kv
#:include gui/kv_files/screen_2.kv
#:include gui/kv_files/toolbar.kv
#:import NoTransition kivy.uix.screenmanager.NoTransition
<WindowInterface>
name: 'main_screen'
BoxLayout:
orientation: "vertical"
Label:
text: "main screen"
Button:
text: "to screen 1"
on_press: app.root.current = "screen_1"
Button:
text: "to screen 2"
on_press: app.root.current = "screen_2"
ScreenManager:
Screen1:
Screen2:
ToolBar:
工具栏.kv
<Toolbar@GridLayout>
BoxLayout:
orientation: "vertical"
size: 10,100
canvas:
Color:
rgba: (1,1,1,1)
Rectangle:
size: self.size
pos: self.pos
先感谢您。梅利托!
解决方案
我注意到您在 .kv 文件 ( Toolbar@GridLayout
) 中创建了从 GridLayout 继承的工具栏,但是由于它是一个类,因此您缺少冒号和缩进。它应该看起来像:
<ToolBar@GridLayout>:
BoxLayout:
Your Code Here
试试看,让我知道会发生什么。不确定这是否是完整的问题,但只是我在您的代码中注意到的一些问题。
推荐阅读
- sql - 如果员工 1 计数 = 员工 2 计数,则打印计数最低的那个
- c++ - ESP32:异步倒数
- css - 选择器超出选择器最大特异性
- sql - SQL (ANSII) 中窗口函数中的 CASE 表达式
- ballerina - 访问结果集而不将其转换为 Json 或 XML ballerina.io
- sql - MSSQL 为每条记录选择前 2 名
- javascript - 赛普拉斯拦截与 url 不匹配
- python - SQLAlchemy Marshmallow 返回空 JSON Flask
- python - 使用 Python 分割 JSON 文件的最简单方法
- javascript - 棘手的“for”循环的输出?