[英]Inheritance with dataclasses for GridLayout of Kivy Python 3
我想這樣做:
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from dataclasses import dataclass
class MyGrid(GridLayout):
def __init__(self, **kwargs):
super.(MyGrid,self).__init__(**kwargs)
self.cols = 2
self.add_widget(Label(text="Pseudo: "))
self.pseudo = TextInput(multiline=False)
self.add_widget(self.pseudo)
class MyApp(App):
def build(self):
return MyGrid()
if __name__ == "__main__":
MyApp().run()
但有數據類。 我進行了幾次搜索,但沒有找到任何東西。
感謝@JohnAnderson 的建議,我試過了:
@dataclass
class MyGrid(GridLayout):
pass
@dataclass
class MyApp(App):
def build(self):
root = MyGrid()
root.cols = 2
pseudo = TextInput(multiline=False)
root.add_widget(Label(text="Pseudo: "))
root.add_widget(pseudo)
return root
if __name__ == "__main__":
MyApp().run()
但我收到此錯誤:
File AppData\Local\Programs\Python\Python310\lib\site-packages\kivy\app.py", line 921, in _run_prepare
if not self.built:
AttributeError: 'MyApp' object has no attribute 'built'. Did you mean: 'build'?
這些add_widget方法來自 Kivy 的 GridLayout。
有人可以幫助用數據類做到這一點嗎? 提前致謝。
正如您在 Kivy 文檔中看到的那樣, add_widget
添加了一個新小部件作為該小部件的子小部件。 例如, parent_widget.add_widget(child_widget)
將孩子添加到父母的小部件中。 這就是為什么你需要使用self.add_widget()
如果你想給你的類添加一個子部件(這是一個 GridLayout)。
這是一個簡單的方法來做你想做的事:
class MyApp(App):
def build(self):
root = MyGrid()
root.cols = 2
pseudo = TextInput(multiline=False)
root.add_widget(Label(text="Pseudo: "))
root.add_widget(pseudo)
return root
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.