首页 > 解决方案 > 如何将时钟小部件添加到屏幕?

问题描述

我正在尝试制作一个 GUI,我想要一个这样的时钟: https ://github.com/dwalker0044/KivyDigitalClock

我想将它添加到具有导航到其他页面的按钮的菜单页面,但我无法弄清楚。我导入了文件,但我不知道如何将它添加到屏幕上。我已经有一段时间了,所以如果有人可以帮助我。

这是我的代码:

主文件

from kivy.config import Config
Config.set('kivy', 'keyboard_mode', 'systemanddock')

#KivyTest.py
import kivy
kivy.require('1.0.6') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.properties import ObjectProperty
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
#from cefpython3 import cefpython as cef
from glob import glob
from random import randint
from os.path import join, dirname
from kivy.app import App
from kivy.logger import Logger
from kivy.uix.scatter import Scatter
from kivy.uix.carousel import Carousel
from kivy.uix.image import AsyncImage

from kivy.uix.scrollview import ScrollView
from kivy.properties import StringProperty
import sys
import platform

import webbrowser
import random
import os

import time
import datetime

from kivy.app import App
from kivy.clock import Clock
from kivy.properties import StringProperty
from kivy.properties import NumericProperty
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import *
from digitalclock import DigitalClock
from digitalclock import SecondsIndicator

class Face(Screen):
    pass

class Menu(Screen):
    def open_Browser(self):
        sys.excepthook = cef.ExceptHook  # To shutdown all CEF processes on error
        cef.Initialize()
        cef.CreateBrowserSync(url="https://www.google.com/",
                          window_title="Google")
        cef.MessageLoop()
        cef.Shutdown()
    def open_YouTube(self):
        sys.excepthook = cef.ExceptHook  # To shutdown all CEF processes on error
        cef.Initialize()
        cef.CreateBrowserSync(url="https://www.youtube.com/",
                            window_title="YouTube")
        cef.MessageLoop()
        cef.Shutdown()
    def open_Pictures(self):
        picturesApp = PicturesApp()
        picturesApp.run()
    def open_Camera(self):
        TestCamera().run()

class Commands(Screen):
    pass

class Manager(ScreenManager):

    face = ObjectProperty(None)
    menu = ObjectProperty(None)


class IonApp(App):

    def build(self):
        m = ScreenManager(transition = NoTransition())
        m.add_widget(DigitalClock(name='Clock'))
        return m


if __name__ == '__main__':
    IonApp().run()

标签: kivy

解决方案


a的add_widget()方法ScreenManager只接受Screen实例。

当您尝试将DigitalClock实例添加到您的ScreenManager.

您需要将该DigitalClock实例添加到您的Screen对象之一(例如 yourMenu或 your Commands),然后将其添加Screen到您的ScreenManagerusing 中add_widget()

KivyDigitalClock代码没有为包含到其他代码中做好充分准备。假设您已将数字时钟代码放在digitalclock文件夹中(如代码中所示),那么您还需要Builder.load_file('digitalclock/digitalclock.kv')在代码中调用。一个很好的地方就是在你IonApp().run()打电话之前。

所以这是我认为可行的:

class IonApp(App):

    def build(self):
        m = ScreenManager(transition = NoTransition())
        screen = Commands(name='commands')
        dc = DigitalClock()
        screen.add_widget(dc)
        m.add_widget(screen)
        dc.update()
        return m


if __name__ == '__main__':
    Builder.load_file('digitalclock/digitalclock.kv')
    IonApp().run()

推荐阅读