我的代碼目前存在無法切換螢屏的問題。在我具體解釋問題是什么之前,我將在下面包含我的代碼片段。
從main.py
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
Window.clearcolor = 255 / 255, 255 / 255, 255 / 255, 1
Window.size = 414, 736
sm = ScreenManager()
class PulseWelcome(Screen):
pass
class PulseWelcomeCanvas(Widget):
pass
class PulseLogin(Screen):
class PulseLoginCanvas(Widget):
pass
class WindowManager(ScreenManager):
pass
sm.add_widget(PulseWelcome(name = 'welcome'))
sm.add_widget(PulseLogin(name = 'login'))
class PulseApp(App):
def build(self):
return PulseWelcome()
if __name__ == '__main__':
PulseApp().run()
從Pulse.kv
#:kivy 2.1.0
WindowManager:
PulseWelcome:
PulseLogin:
<PulseWelcome>:
id: welcome
PulseWelcomeCanvas:
Label:
font_size: 30
font_name: 'assets/fonts/tommy.ttf'
center_x: root.width / 2
center_y: root.height / 2
text: "Welcome to Pulse!"
color: 0, 0, 0, 1
Button:
background_normal: 'assets/images/next_purple_normal.png'
background_down: 'assets/images/next_purple_down.png'
border: 0, 0, 0, 0
center_x: root.width / 2
center_y: 90
height: 40
width: 100
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'login'
<PulseLogin>:
id: login
PulseLoginCanvas:
Label:
font_size: 30
font_name: 'assets/fonts/tommy.ttf'
text: 'Sign In or Sign Up'
color: 0, 0, 0, 1
center_x: root.width / 2
center_y: root.height / 2
我的應用程式在程式啟動時運行正常,但是,當我單擊按鈕以更改螢屏時,出現此錯誤:
File "C:\Users\Nitro\Documents\Pulse\pulse.kv", line 30, in <module>
root.manager.transition.direction = 'left'
AttributeError: 'NoneType' object has no attribute 'transition'
我嘗試了各種解決方案,但沒有任何進展。我的猜測是,因為我試圖從螢屏類中的小部件切換螢屏,所以我得到了前面討論的錯誤。我最初決定在每個螢屏類中放置一個小部件來組織元素,因為當我嘗試.kv為螢屏類獨立組織檔案中的元素(PulseWelcome 等)時,我遇到了 gui 問題。
我還嘗試在螢屏類中定義一個可以通過包含的小部件激活的函式。在嘗試之后,我得到了這個錯誤:
kivy.uix.screenmanager.ScreenManagerException: ScreenManager accepts only Screen widget.
不確定是否有人知道可能導致問題的原因以及如何解決它,但如果有人對前面提到的任何問題有任何形式的輸入,我們將不勝感激。
uj5u.com熱心網友回復:
您尚未初始化回傳螢屏的螢屏管理器而不是螢屏管理器
主要.py:
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
Window.clearcolor = 255 / 255, 255 / 255, 255 / 255, 1
Window.size = 414, 736
class PulseWelcome(Screen):
pass
class PulseWelcomeCanvas(Widget):
pass
class PulseLogin(Screen):
class PulseLoginCanvas(Widget):
pass
class WindowManager(ScreenManager):
pass
class PulseApp(App):
def build(self):
sm = ScreenManager()
sm.add_widget(PulseWelcome(name='welcome'))
sm.add_widget(PulseLogin(name='login'))
return sm
if __name__ == '__main__':
PulseApp().run()
像這樣定義構建函式應該可以解決問題。
.kv:
<PulseWelcome>:
id: welcome
PulseWelcomeCanvas:
Label:
font_size: 30
font_name: 'assets/fonts/tommy.ttf'
center_x: root.width / 2
center_y: root.height / 2
text: "Welcome to Pulse!"
color: 0, 0, 0, 1
Button:
background_normal: 'assets/images/next_purple_normal.png'
background_down: 'assets/images/next_purple_down.png'
border: 0, 0, 0, 0
center_x: root.width / 2
center_y: 90
height: 40
width: 100
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'login'
<PulseLogin>:
id: login
PulseLoginCanvas:
Label:
font_size: 30
font_name: 'assets/fonts/tommy.ttf'
text: 'Sign In or Sign Up'
color: 0, 0, 0, 1
center_x: root.width / 2
center_y: root.height / 2
我還從 kv 檔案中洗掉了螢屏管理器,因為在創建螢屏管理器時它不起作用,就像我在這里所做的那樣。否則你將不得不像這樣創建構建函式
建造:
def build:
returm WindowManager()
我在執行這樣的構建功能時遇到了一些麻煩,所以現在我會按照我第一次向您展示的方式進行操作
希望這可以幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/478085.html
