调整根窗口大小后,如何使弹出窗口上的窗口小部件保留在弹出窗口中

时间:2020-08-07 22:15:29

标签: python kivy

当根窗口调整大小时,我的弹出窗口中的窗口小部件没有调整大小。弹出窗口和弹出窗口上的标签保持原样。它与弹出窗口本身的size_hint和大小有关吗?这些小部件(图标)似乎独立于弹出窗口。

主文件

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image
from kivy.properties import StringProperty, ObjectProperty,NumericProperty
from kivy.uix.popup import Popup
from kivy.uix.floatlayout import FloatLayout


class MainScreen(Screen, FloatLayout):
    mantra_text = ObjectProperty(None)

    def printMantra(self):
        print(self.ids.mantra_text.text)

    def icon_popup(self):
        popup = Popup(title="Profile Icon", content=Popup_Content(), size_hint=(None, None), size=(300, 200))
        popup.open()


class Popup_Content(FloatLayout):
    pass


class ImageButton(ButtonBehavior, Image):
    pass


class MainApp(App):
    def build(self):
        return MainScreen()

    def set_profile_icon(self, image):
        self.root.ids.profile_icon.source = image.source
        print(image)
        #print(self.root.ids.profile_icon)


MainApp().run()

奇异果文件

#:import utils kivy.utils
<MainScreen>
    Popup_Content:
        id: popup_content

    FloatLayout:
        canvas:
            Color:
                rgb: utils.get_color_from_hex("#ffbb99")
            Rectangle:
                pos: self.pos
                size: self.size

        GridLayout:
            cols: 2
            pos_hint: {"x":0.6, "top":1}
            size_hint: 0.4,0.2
            spacing_horizontal: [0.9*root.width]
            Label:
                text: "Name"
            ImageButton:
                id: profile_icon
                source: "profile_icon"
                on_release: root.icon_popup()

        Label:
            text: mantra_text.text
            pos_hint: {"x":0, "top":0.8}
            size_hint: 1, 0.2
            text_size: self.size
            halign: "center"
            font_size: 25
        TextInput:
            id: mantra_text
            pos_hint: {"x": 0.15, "top":0.6}
            size_hint: 0.7, 0.1
            #text_size: self.size

        Label:
            text: "Time"
            pos_hint: {"x":0.3, "top":0.6}
            size_hint: 0.4, 0.2
            text_size: self.size
            halign: "left"
            font_size: 30

        Button:
            text: "Time"
            pos_hint: {"x":0.3, "top":0.5}
            size_hint: 0.4, 0.2
            on_release: root.printMantra()

<Popup_Content>

    #profile_icon: profile_icon
    FloatLayout:
        GridLayout:
            cols: 5
            pos_hint: {"x":0.95, "y":1.6}

            ImageButton:
                id: man_01
                source: "icons/male_icon_01.png"
                on_release: app.set_profile_icon(man_01)
            ImageButton:
                id: man_02
                source: "icons/male_icon_02.png"
                on_release: app.set_profile_icon(man_02)
            ImageButton:
                source: "icons/male_icon_01.png"
                on_release: app.set_profile_icon()
            ImageButton:
                source: "icons/male_icon_01.png"
                on_release: app.set_profile_icon()
            ImageButton:
                source: "icons/male_icon_01.png"
                on_release: app.set_profile_icon()
            ImageButton:
                id: female_01
                source: "icons/female_icon_01.png"
                on_release: app.set_profile_icon(female_01)


enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您希望<html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>California Cafe Directory</title> <link rel="stylesheet" href="bootstrap.css"> <link rel="stylesheet" href="page.css"> </head> <body> <div class="container-fluid"> <div class="row"> <div class="col-12" id="header-wrapper"> <div class="container"> <div class="row"> <div class="col-12" id="header"> <h2>California Cafe Directory</h2> </div> <div class="col-12" id="search-wrapper"> <input id="search" type="text" oninput="searching()" placeholder="Search your favorite cafes!"> </div> </div> </div> </div> <div class="container"> <div class="row"> <div class="col-12" id="table-wrapper"> <table> <thead> <tr class="table100-head"> <th class="column1">S No</th> <th class="column2">Cafe Name</th> <th class="column3">Address</th> <th class="column4">Postal Code</th> <th class="column5">Lat</th> <th class="column6">Long</th> </tr> </thead> <tbody id="myTBD"> <tr> <td class="column1">1</td> <td class="column2"><span id="col2"></span></td> <td class="column3">45250 Worth Avenue, Unit A</td> <td class="column4">201619</td> <td class="column5">36.1152</td> <td class="column6">117.521</td> </tr> <tr> <td class="column1">2</td> <td class="column2">Bazaar Cafe</td> <td class="column3">45250 Worth Avenue, Unit A</td> <td class="column4">201619</td> <td class="column5">36.1152</td> <td class="column6">117.521</td> </tr> <tr> <td class="column1">3</td> <td class="column2">Bazaar Cafe</td> <td class="column3">45250 Worth Avenue, Unit A</td> <td class="column4">201619</td> <td class="column5">36.1152</td> <td class="column6">117.521</td> </tr> <tr> <td class="column1">4</td> <td class="column2">Bazaar Cafe</td> <td class="column3">45250 Worth Avenue, Unit A</td> <td class="column4">201619</td> <td class="column5">36.1152</td> <td class="column6">117.521</td> </tr> <tr> <td class="column1">5</td> <td class="column2">Bazaar Cafe</td> <td class="column3">45250 Worth Avenue, Unit A</td> <td class="column4">201619</td> <td class="column5">36.1152</td> <td class="column6">117.521</td> </tr> <tr> <td class="column1">6</td> <td class="column2">Bazaar Cafe</td> <td class="column3">45250 Worth Avenue, Unit A</td> <td class="column4">201619</td> <td class="column5">36.1152</td> <td class="column6">117.521</td> </tr> </tbody> </table> </div> </div> </div> </div> </div> <script src="solution.js"></script> </body> </html>在调整Popup的大小时更改大小,请使用App。像这样:

size_hint

使用popup = Popup(title="Profile Icon", content=Popup_Content(), size_hint=(0.5, 0.5)) 会将size_hint=(None, None), size=(300, 200)的大小强制为Popup,而与(300, 200)的大小无关。

要使MainScreen Popup跟随content,可以使用Popup。在RelativeLayout的{​​{3}}中,它表示:

将位置=(0,0)的小部件添加到RelativeLayout时, 当RelativeLayout的位置为 改变了。子窗口小部件坐标始终保持(0,0) 相对于父级布局。

因此,如果您将RelativeLayout定义为Popup_Content,那么RelativeLayout将紧随其后。我建议将GridLayout定义为:

Popup_Content

然后,在class Popup_Content(RelativeLayout): pass 中:

kv