【发布时间】:2014-02-06 12:00:51
【问题描述】:
我想制作一个游戏,我选择了 Kivy 作为我的 GUI,因为我用 Python 编写了我的后端。我目前正在使用runTouchApp(appwindow) 运行应用程序,其中appwindow 是FloatLayout() 对象。我更新屏幕的方式是运行appwindow.clear_widgets() 和then appwindow.add_widget(new_screen),其中new_screen 是包含所有其他小部件的布局对象。
到目前为止它工作得很好,但由于某种原因,我无法理解我添加的小部件被正确加载(根据在后台运行的 cmd),但在我更改屏幕尺寸之前不会显示。
这是一个示例代码:
import kivy
kivy.require('1.1.1')
from kivy.base import runTouchApp
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
appwindow = FloatLayout()
class MenuScreen():
def build(self):
bg = Image(source = 'Images/bg/bg.jpg',allow_stretch= True,keep_ratio= False)
box = BoxLayout(orientation = 'vertical')
menu_items = []
for i in range (0,4):
button = Button(text = 'Menu item no:'+str(i))
button.bind(state = checkMenuPress)
menu_items.append(button)
for button in menu_items:
box.add_widget(button)
floater = FloatLayout(size = bg.size)
floater.add_widget(bg)
floater.add_widget(box)
floater.size_hint = 1,1
return floater
class SecondScreen():
def build(self):
bg = Image(source = 'Images/bg/bg.jpg',allow_stretch= True,keep_ratio= False)
box = BoxLayout(orientation = 'vertical')
box.add_widget(bg)
return box
def checkMenuPress(button,*args):
if button.state == 'normal':
sc = SecondScreen().build()
appwindow.clear_widgets()
appwindow.add_widget(sc)
if __name__ == '__main__':
menuscreen = MenuScreen().build()
appwindow.add_widget(menuscreen)
runTouchApp(appwindow)
【问题讨论】:
-
请提供一个简短的工作示例来说明您的问题。用这么少的信息是不可能调试的。
-
上面的代码工作正常,但是在几次屏幕更新后,最终屏幕只显示背景图像和标签。按钮和其他图像已加载但在窗口大小更改之前不显示