请原谅乱七八糟的代码--这里是新手编码器。我想要有两个屏幕:一个有网格布局,另一个是空白。现在,网格布局屏幕上的每个按钮都应该将用户发送到空白屏幕。最后,我希望每个按钮的标签都由用户替换,在screen2上有一个输入字段。我还在python文件中使用for循环来创建网格布局并相应地标记按钮。
我的问题是,当我运行该文件时,它会编译,但会显示一个黑屏。
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
class ScreenOne(Screen):
def makeGrid(self):
layout = GridLayout(cols = 12)
flipper = 6
m = 2
for r in range(1,17):
flipper = flipper * -1
subt = 6 + flipper
offset = m%2
for c in range(1,13):
cols = abs(c-subt) + offset
btn = Button(text=(str(r)+ '.'+ str(cols)))
layout.add_widget(btn)
m += 1
return layout
class ScreenTwo(Screen):
pass
class DraftBoardApp(App):
sm = ScreenManager()
def build(self):
DraftBoardApp.sm.add_widget(ScreenOne(name='screen_1'))
DraftBoardApp.sm.add_widget(ScreenTwo(name='screen_2'))
return DraftBoardApp.sm
if __name__ == '__main__':
DraftBoardApp().run()我的.kv文件现在实际上是空的
<Screen_One>:
<Screen_Two>:发布于 2022-08-03 20:50:10
在发布的代码中,ScreenOne并不是初始化(初始化),这就是为什么您没有看到这些小部件的原因。方法makeGrid只是定义在该类中的一个常规方法。要使工作正常,您可以在默认的__init__中定义所有内容(但不要返回任何内容),或者调用makeGrid方法来添加返回的实例。
所以第一种方法是这样的,
class ScreenOne(Screen):
def __init__(self, **kwargs):
# Make sure you didn't override any
# superclass rule by calling super on this.
super().__init__(**kwargs)
# Define, add etc. whatever you need.
layout = GridLayout(cols = 12)
flipper = 6
m = 2
for r in range(1,17):
flipper = flipper * -1
subt = 6 + flipper
offset = m%2
for c in range(1,13):
cols = abs(c-subt) + offset
btn = Button(text=(str(r)+ '.'+ str(cols)))
layout.add_widget(btn)
m += 1
# Don't forget to add to this.
self.add_widget(layout)另外,在方法build中,您应该修改它的实例,而不是直接访问应用程序的子类(这里是DraftBoardApp),
self.sm.add_widget(ScreenOne(name='screen_1'))而不是
DraftBoardApp.sm.add_widget(ScreenOne(name='screen_1'))等。
https://stackoverflow.com/questions/73215765
复制相似问题