簡體   English   中英

Kivy Python 3 GridLayout 的數據類繼承

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM