【发布时间】:2020-01-03 10:05:37
【问题描述】:
我在我的 kv 文件中动态添加小部件时遇到问题,到目前为止我所看到的一切都是围绕在 py 文件中添加小部件。我想为此使用 kv 文件的原因是我有一个修改过的 Button 小部件,我想使用它写在 kv 文件中,但我不知道如何在 py 文件中创建它。
所以我猜有两个可能的问题:
1) 如何在 kv 文件中正确使用 add_widget。在下面的代码中,我得到 NameError: SmoothButton is not defined。
或者
2) 如何在 py 文件中创建我的 SmoothButton?
kv 文件:
WindowManager:
ChatPage:
<ChatPage>:
name: "chat_page"
NavigationLayout:
id: nav_layout
MDNavigationDrawer:
NavigationDrawerIconButton:
text: "Test"
on_release: app.root.current = "login"
FloatLayout:
MDToolbar:
pos_hint: {'top': 1}
md_bg_color: 0.2, 0.6, 1, 1
left_action_items: [['menu', lambda x: root.ids.nav_layout.toggle_nav_drawer()]]
Button:
text: "Create button"
pos_hint: {"x": 0.65, "top": 0.15}
size_hint: 0.35, 0.15
on_release: root.add_widget(SmoothButton)
<SmoothButton@Button>:
background_color: 0,0,0,0
background_normal: ""
back_color: 1,0,1,1
border_radius: [6]
canvas.before:
Color:
rgba: self.back_color
RoundedRectangle:
size: self.size
pos: self.pos
radius: self.border_radius
py 文件:
import kivy
from kivy.app import App
from kivy.properties import ObjectProperty, StringProperty, NumericProperty, ListProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.core.window import Window
from kivymd.theming import ThemeManager
import mysql.connector
from kivymd.uix.picker import MDDatePicker
class ChatPage(Screen):
pass
class WindowManager(ScreenManager):
pass
class MyApp(App):
theme_cls = ThemeManager()
def build(self):
kv = Builder.load_file("kivy.kv")
sm = WindowManager()
screens = [ChatPage(name="chat_page")]
for screen in screens:
sm.add_widget(screen)
sm.current = "chat_page"
return sm
if __name__ == '__main__':
MyApp().run()
Thanks
【问题讨论】:
-
使用
root.add_widget(SmoothButton()) -
我也试过了,得到了同样的错误信息
-
好的,我已经编辑过了。谢谢
标签: python python-3.x kivy kivy-language