Kivy窗口隐藏/显示

时间:2017-04-26 13:36:36

标签: python kivy kivy-language

我是python编程的新手并且想要学习让我创建一个项目。这是我想要做的。我想创建一个在系统托盘中运行的程序,然后触发一个在后台加载的程序。在后台加载,这样我就可以减少Kivy的开始时间。在这里和谷歌搜索后,我找不到答案。

我有两个文件

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.config import Config
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window
from kivy.config import Config
# 

import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.core.window import Window

Config.set('graphics', 'window_state', 'hidden')

class MyApp(App):
    visible = False

    def build(self):
        Window.bordeless = 'True'
        return Button(text='Hello World')

    def on_start(self):
        if self.visible:
            self.root_window.hide()
        self.visible = not self.visible
        # self.root.focus = True

    def do_show(self):
        rootWindow = self.root_window
        rootWindow.show()
        print(self.root_window.focus)

if __name__ in ('__main__'):
    ma = MyApp().run()

import wx
import someKivyThigy
from kivy.app import App
from someKivyThigy import MyApp
from buttonThing import MyDebugApp
from kivy.core.window import Window

TRAY_TOOLTIP = 'System Tray Demo'
TRAY_ICON = 'icon.png'

testVar = MyApp

def create_menu_item(menu, label, func):
    item = wx.MenuItem(menu, -1, label)
    menu.Bind(wx.EVT_MENU, func, id=item.GetId())
    menu.AppendItem(item)
    return item


class TaskBarIcon(wx.TaskBarIcon):
    def __init__(self):
        super(TaskBarIcon, self).__init__()
        self.set_icon(TRAY_ICON)
        self.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.on_left_down)

    def CreatePopupMenu(self):
        menu = wx.Menu()
        create_menu_item(menu, 'Say Hello', self.on_hello)
        menu.AppendSeparator()
        create_menu_item(menu, 'Exit', self.on_exit)
        return menu

    def set_icon(self, path):
        icon = wx.IconFromBitmap(wx.Bitmap(path))
        self.SetIcon(icon, TRAY_TOOLTIP)

    def on_left_down(self, event):
        print 'Tray icon was left-clicked.'
        MyApp().do_show()


    def on_hello(self, event):
        print 'Hello, world!'

    def on_exit(self, event):
        wx.CallAfter(self.Destroy)


def main():
    app = wx.PySimpleApp()
    TaskBarIcon()
    testVar = MyApp().run()
    app.MainLoop()

if __name__ == '__main__':
    main()

当我左键单击系统托盘图标时,我收到错误:“AttributeError:'NoneType'对象没有属性'show'”。我做错了什么?

1 个答案:

答案 0 :(得分:2)

Kivy 是专为 Android 平台开发的,但这并不意味着它不能用于桌面应用程序开发。但请记住,窗口管理器可以将 SLD2 提供程序作为后备,因此该提供程序支持隐藏窗口但无法恢复它。

对于隐藏窗口,您可以使用:Window.hide() 从 kivy.core.window 导入 Window

对于恢复,您可以使用:Window.restore() 或 Window.show()