gpt4 book ai didi

python - Kivy ScreenManager 破坏了 BoxLayout

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:53 24 4
gpt4 key购买 nike

我是 Kivy 新手,但能够创建一个单屏应用程序。一切看起来都很好,直到我需要添加更多屏幕。一页应用程序显示正确,但当我添加屏幕时,BoxLayouts 不再按我的预期工作。所有小部件都在屏幕底部呈现在彼此之上。我的问题是我在实现 ScreenManager 时做错了什么?

单屏应用程序如下所示:

Survey screen

我决定将其设为多屏,但是当我添加 ScreenManager 逻辑时,生成的屏幕如下所示:

Survey screen using ScreenManager

我从this tutorial获取信息

我的 main.py 文件如下所示:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class Pay_screen(Screen):
pass

class Survey_screen(Screen):
pass

class Finish_screen(Screen):
pass

class Sm(ScreenManager):
pass

class Next_root(BoxLayout):
pass

class Nq_disagree_label(Label):
pass

class Nq_question_label(Label):
pass

class Nq_button(Button):
pass

class survey_form(BoxLayout):
#dept_button = ObjectProperty()

def send_survey(self):
mypopup = MyPopup()
mypopup.show_popup('Survey', 'Survey sent!', 'OK!')

def add_comment(self):
mypopup = MyPopup()
mypopup.show_popup('Comment', 'This is where a comment is added.', 'OK!')

def close_app(self):
App.get_running_app().stop()

class MyPopup(Popup):
def show_popup(self, title_text, label_text, button_text):
mytext= label_text
content = BoxLayout(orientation="vertical")
content.add_widget(Label(text=mytext, font_size=20, text_size=(300, None)))
mybutton = Button(text="Ok!", size_hint=(1,.20), font_size=20)
content.add_widget(mybutton)
mypopup = Popup(content = content,
title = title_text,
auto_dismiss = False,
size_hint = (.5, .5)) #,
#font_size = 20)
mybutton.bind(on_press=mypopup.dismiss)
mypopup.open()

class nextqualApp(App):
icon = 'nextqual.png'
title = 'Pay / survey / join'


if __name__ == '__main__':

nextqualApp().run()

我的屏幕管理器 KV 文件如下所示:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

Sm:
transition: FadeTransition()
Survey_screen:
Pay_screen:


<nq_button@Button>:
halign: "center"
text: "Add\ncomment"
size_hint_x: 10

<Nq_disagree_label@Label>:
halign: "left"
size_hint_x: 10
text:"Strongly\ndisagree"

<Nq_agree_label@Label>:
halign: "left"
size_hint_x: 10
text:"Strongly\nagree"

<Nq_question_label@Label>:
halign: "left"
font_size: "24"
size_hint_x: 25

<Pay_screen>:
name: 'pay'
#orientation: "vertical"
#padding: 6
#font_size: 24
BoxLayout:
height: "40dp"
Button:
text: "Pay your bill"
on_release: app.root.current = 'pay'
Button:
text: "Tell us how we did"
on_release: app.root.current = 'survey'
Button:
text: "I'm finished"
BoxLayout:
Button:
text: "Pay your bill"
on_release: app.root.current = 'survey'

<Survey_screen>:
name: "survey"
#orientation: "vertical"
#padding: 6
#font_size: "24"

BoxLayout:
height: "40dp"
Button:
text: "Pay your bill"
on_release: app.root.current = 'pay'

Button:
text: "Tell us how we did"
on_release: app.root.current = 'survey'
Button:
text: "I'm finished"

BoxLayout:
halign: "center"
Image:
source: "logo.jpg"
#size: self.size

BoxLayout:
height: "80dp"
size_hint_y: None
Label:
bold: True
#color: 10,10,10,10
#halign: "center"
#text_size: self.size
markup: True
text: "[color=f9f752]Description[/color]"
multiline: True
#size_hint_x: 25
text_size: self.size
halign: 'center'
valign: 'middle'


BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The service I recieved from start to finish was excellent."

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "I waited an appropriate amount of time for my food and drink."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()


BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The quality and presentation of the food was outstanding."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()


BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The prices provide good value for money."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The atmosphere was relaxing and enjoyable."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The overall cleanliness was very acceptable."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "I will recommend Synterest to my friends and family."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()


BoxLayout:
height: "100dp"
size_hint_y: None

Label:
size_hint_x: 40
Button:
size_hint_x: 20
text:"Send survey"
halign: "center"
on_press: root.send_survey()
Label:
size_hint_x: 40

没有屏幕管理器的 KV 文件如下所示:

nq_button@Button>:
halign: "center"
text: "Add\ncomment"
size_hint_x: 10

<Nq_disagree_label@Label>:
halign: "left"
size_hint_x: 10
text:"Strongly\ndisagree"

<Nq_agree_label@Label>:
halign: "left"
size_hint_x: 10
text:"Strongly\nagree"

<Nq_question_label@Label>:
halign: "left"
font_size: "24"
size_hint_x: 25

survey_form:

<survey_form>:
name: "survey"
orientation: "vertical"
padding: 6
font_size: "24"

BoxLayout:
height: "40dp"
Button:
text: "Pay your bill"
on_release: app.root.current = 'pay'

Button:
text: "Tell us how we did"
on_release: app.root.current = 'survey'
Button:
text: "I'm finished"

BoxLayout:
halign: "center"
Image:
source: "logo.jpg"
#size: self.size

BoxLayout:
height: "80dp"
size_hint_y: None
Label:
bold: True
#color: 10,10,10,10
#halign: "center"
#text_size: self.size
markup: True
text: "[color=f9f752]At Synterest, we care deeply about your impressions of our food, service and atmosphere. We would be very grateful if you took a few moments to give us your feedback on how you enjoyed your meal.[/color]"
multiline: True
#size_hint_x: 25
text_size: self.size
halign: 'center'
valign: 'middle'


BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The service I recieved from start to finish was excellent."

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "I waited an appropriate amount of time for my food and drink."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()


BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The quality and presentation of the food was outstanding."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()


BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The prices provide good value for money."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The atmosphere was relaxing and enjoyable."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "The overall cleanliness was very acceptable."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()

BoxLayout:
height: "40dp"
size_hint_y: None
Nq_question_label:
text: "I will recommend Synterest to my friends and family."
BoxLayout:
height: "40dp"
size_hint_y: None
Nq_disagree_label:
Slider:
size_hint_x: 80
value: 50
Nq_agree_label:
nq_button:
on_press: root.add_comment()


BoxLayout:
height: "100dp"
size_hint_y: None

Label:
size_hint_x: 40
Button:
size_hint_x: 20
text:"Send survey"
halign: "center"
on_press: root.send_survey()
Label:
size_hint_x: 40

最佳答案

经过长时间的思考,有时答案就会变得显而易见。

Survey_screen 和 Pay_screen 继承自 Main.py 文件中的 Screen。当我制作最初的一页应用程序时,根小部件继承自 BoxLayout。

我向 .kv 文件中的每个屏幕添加了一个 BoxLayout,并将所有内容放在正确的位置。

例如,

<Survey_screen>:
name: "survey"
BoxLayout:
orientation: "vertical"
padding: 6
BoxLayout:
height: "40dp"
size_hint_y: None

Button:

等等

关于python - Kivy ScreenManager 破坏了 BoxLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com