【发布时间】:2019-12-24 12:42:53
【问题描述】:
这是代码以及 kv 文件。
图像未根据微调器选择显示。
我需要在第二个屏幕中显示带有两到三张图片的图片,点击相同的图片时,应该会弹出一个包含详细信息和另一张图片的弹出窗口。
from kivy.app import App
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.spinner import Spinner
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.screenmanager import SlideTransition
from kivy.lang import Builder
from kivy.config import Config
Config.set('graphics', 'resizable', True)
kv=Builder.load_string("""
<Image1n>:
orientation:'vertical'
BoxLayout:
padding:5
ImageButton:
source: 'anorth.jpg'
size_hint: 0.6, 0.6
pos_hint: {'center_x':.1, 'center_y': .8}
on_release: root.on_press()
BoxLayout:
padding:5
ImageButton:
source:'bnorth.jpg'
size_hint: 0.8, 0.8
pos_hint: {'center_x':.1, 'center_y': .2}
on_release: root.on_press()
<Image1e>:
orientation:'vertical'
BoxLayout:
padding:5
ImageButton:
source: 'aeast.jpg'
size_hint: 0.6, 0.6
pos_hint: {'center_x':.1, 'center_y': .8}
on_release: root.on_press1()
BoxLayout:
padding:5
ImageButton:
source:'beast.jpg'
size_hint: 0.8, 0.8
pos_hint: {'center_x':.1, 'center_y': .2}
on_release: root.on_press1()
"""
)
class ImageButton(ButtonBehavior, Image):
pass
class Image1n(Screen,BoxLayout):
pass
class Image1e(Screen,BoxLayout):
pass
class Image1BHKNorth(Screen,ButtonBehavior, Image,GridLayout):
def imagebutton1bhknorth(self):
return kv
def on_press(self):
layout = GridLayout(cols=2,rows=2)
popupLabel = Label(text = " Details"
"\n House Type - 1BHK"
"\n Area - 800")
image= Image(source='anorth1.jpg')
closeButton = Button(text = "Close",size_hint_x=0.1,size_hint_y=0.1)
layout.add_widget(popupLabel)
layout.add_widget(image)
layout.add_widget(closeButton)
popup = Popup(title =' Details',
content = layout)
popup.open()
closeButton.bind(on_press = popup.dismiss)
class Image1BHKEast(Screen,ButtonBehavior, Image,GridLayout):
def imagebutton1bhkeast(self):
return kv
def on_press1(self):
layout = GridLayout(cols=2,rows=2)
popupLabel = Label(text = " Details"
"\n House Type - 1BHK"
"\n Area - 800\n Direction - North")
image= Image(source='aeast1.jpg')
closeButton = Button(text = "Close",size_hint_x=0.1,size_hint_y=0.1)
layout.add_widget(popupLabel)
layout.add_widget(image)
layout.add_widget(closeButton)
popup = Popup(title =' Details',
content = layout)
popup.open()
closeButton.bind(on_press = popup.dismiss)
class CustomScreen(Screen):
def __init__(self, **kwargs):
super(CustomScreen, self).__init__(**kwargs)
layout = BoxLayout(orientation='vertical')
self.spinnerObject = Spinner(text ="House",
values =("1BHK", "2BHK", "3BHK"),
background_color =(0.784, 0.443, 0.216, 1))
self.spinnerObject.size_hint = (0.2, 0.2)
self.spinnerObject.pos_hint ={'x': .35, 'y':.40}
layout.add_widget(self.spinnerObject)
#spinner-selection
self.spinnerObject.bind(text=self.spinner_select)
self.spinnerSelection = Label(text="%s"%self.spinnerObject.text)
layout.add_widget(self.spinnerSelection)
self.spinnerSelection.pos_hint={'x': .1, 'y':.3}
#second spinner
self.spinnerObject1 = Spinner(text ="Area",
values =("800","1200", "1500", "1800", "2200"),
background_color =(0.784, 0.443, 0.216, 1))
self.spinnerObject1.size_hint = (0.2, 0.2)
self.spinnerObject1.pos_hint ={'x': .35, 'y':.40}
layout.add_widget(self.spinnerObject1)
#spinner-selection
self.spinnerObject1.bind(text=self.spinner_select)
self.spinnerSelection1 = Label(text="%s"%self.spinnerObject1.text)
layout.add_widget(self.spinnerSelection1)
self.spinnerSelection1.pos_hint={'x': .1, 'y':.3}
#third spinner
self.spinnerObject2 = Spinner(text ="Directions",
values =("North","East"),
background_color =(0.784, 0.443, 0.216, 1))
self.spinnerObject2.size_hint = (0.2, 0.2)
self.spinnerObject2.pos_hint ={'x': .35, 'y':.20}
layout.add_widget(self.spinnerObject2)
#spinner-selection
self.spinnerObject2.bind(text=self.spinner_select)
self.spinnerSelection2 = Label(text="%s"%self.spinnerObject2.text)
layout.add_widget(self.spinnerSelection2)
self.spinnerSelection2.pos_hint={'x': .1, 'y':.3}
layout.add_widget(Label(text=self.name, font_size=30))
navig = BoxLayout(size_hint=(0.2,0.4),pos_hint={'top': 1, 'center_x':0.5})
next = Button(text='Search')
next.bind(on_release=self.switch_next)
navig.add_widget(next)
layout.add_widget(navig)
self.add_widget(layout)
def spinner_select(self,spinner,text):
self.spinnerSelection.text = "%s"%self.spinnerObject.text
self.spinnerSelection1.text = "%s"%self.spinnerObject1.text
self.spinnerSelection2.text = "%s"%self.spinnerObject2.text
self.ib=Image1BHKNorth()
self.ib1=Image1BHKEast()
if self.spinnerSelection.text=='1BHK'and self.spinnerSelection1.text=='800' and self.spinnerSelection2.text=='North':
self.ib.imagebutton1bhknorth()
sm.add_widget(Image1BHKNorth(name='onebhkn'))
if self.spinnerSelection.text=='1BHK'and self.spinnerSelection1.text=='800' and self.spinnerSelection2.text=='East':
self.ib1.imagebutton1bhkeast()
sm.add_widget(Image1BHKEast(name='onebhke'))
def switch_next(self, *args):
self.manager.transition = SlideTransition(direction="right")
self.manager.current = self.manager.next()
sm = ScreenManager()
sm.add_widget(CustomScreen())
class SA(App):
def build(self):
return sm
if __name__ == '__main__':
SA().run()
修订:
条件正常,因为弹出窗口显示了条件图像。唯一的问题是 kv 文件中的图像(预计垂直显示两个图像)没有显示(我得到的只有一个空白屏幕)。弹出图像与给定的内容一起完美显示。
【问题讨论】:
-
能否请您添加您项目的结构示例?只是为了检查您要显示的图像在哪里^^
-
@JorgeC.M 我实际上使用 Anaconda spyder 作为 IDE,并将图像保存在保存我的代码的文件夹中。没有给出条件时,图像正在显示。
-
我明白了...您能检查(打印)在
self.spinnerSelection.text = "%s"%self.spinnerObject.textlines 之后的微调器文本的值吗?也许文本值与您检查的值不同,然后它不会在 if 子句中输入 -
@JorgeC.M 选择的微调器中的文本正在正确显示
self.spinnerSelection.text = "%s"%self.spinnerObject.text这行代码。可能还有其他一些逻辑错误,因为布局显示在角落,点击时也会弹出一个窗口。 -
您的代码存在一些严重问题。首先,您的“kv”字符串实际上没有被使用。您在代码中引用它,但实际上您并没有对它做任何事情。您在
Image1n、Image1e、Image1BHKNorth和Image1BHKEast类中进行了一些危险的多重继承。在每个类中,您都在扩展Screen类(它本身扩展RelativeLayout)以及另一个Layout类(GridLayout或BoxLayout)。所有这三个Layout类都有自己的do_layout()方法。您希望使用哪一个?
标签: python python-3.x kivy kivy-language