【问题标题】:How to run a function when the Kivy window is un-minimised当 Kivy 窗口未最小化时如何运行函数
【发布时间】:2020-11-21 22:38:18
【问题描述】:

我有一个具有透视窗口的应用程序-

当它未最小化时,我想截屏以更新图像,但我不知道如何在窗口未最小化时运行函数。

我试过了

from io import BytesIO

from PIL import ImageGrab
from kivy.lang.builder import Builder
from kivy.clock import Clock
from kivy.core.image import Image as CoreImage
from kivy.core.window import Window as CoreWindow
from kivy.uix.floatlayout import FloatLayout
from kivy.app import App


class Widget(FloatLayout):
    def __init__(self, *args, **kwargs):
        super(Widget, self).__init__(*args, **kwargs)

        CoreWindow.bind(left=self.on_pos, top=self.on_pos)

        Clock.schedule_once(self.take_screenshot, 0)

    def on_pos(self, _, pos):
        self.ids["parentScreenImage"].pos = 0 - CoreWindow.left, \
                                            (CoreWindow.top + CoreWindow.height) - self.ids["parentScreenImage"].size[1]

    def take_screenshot(self, _=None):
        img = ImageGrab.grab()
        data = BytesIO()
        img.save(data, format='png')
        data.seek(0)
        img = CoreImage(BytesIO(data.read()), ext='png')

        self.ids["parentScreenImage"].texture = img.texture
        self.ids["parentScreenImage"].size = img.size
        self.ids["parentScreenImage"].pos = 0 - CoreWindow.left, 0 - CoreWindow.top


class app(App):
    def on_unminimise(self):
        print("worked with on_unminimise")

    def on_un_minimise(self):
        print("worked with on_un_minimise")

    def on_resume(self):  # I think this only works on a phone
        print("worked with on_resume")

    def build(self):
        return Widget()


Builder.load_string("""
<Widget>:
    Image:
        id: parentScreenImage

        size_hint: None, None
""")
app().run()

但是什么都没有打印出来。 谷歌上似乎也没有任何内容。请帮忙。

附:出于兴趣,当窗口最小化时你将如何运行它

【问题讨论】:

    标签: python kivy window


    【解决方案1】:

    我认为你可以绑定到on_show 事件:

    class app(App):
        def on_show(self, window):
            print('show', window)
    
        def build(self):
            CoreWindow.bind(on_show=self.on_show)
            return Widget()
    

    【讨论】:

    • 顺便说一句,我认为定义自己的Widget 类不是一个好主意。
    • 谢谢,只是因为我不知道在示例中给类起什么名字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2018-08-24
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多