【问题标题】:Can you obtain physical size of device in kivy?你能在kivy中获得设备的物理尺寸吗?
【发布时间】:2016-10-17 20:41:12
【问题描述】:

有谁知道 Kivy 如何以不同的字体呈现文本?

我有 16sp 的文本标签。

在屏幕尺寸为 (1024, 552) 和 (2048, 1536) 的平板电脑上,它可以完美运行(宽高比分别为 1.855 和 1.333)

在屏幕尺寸为 (1280, 720)(比率 1.778)的电脑上,它也能完美显示,但在这种屏幕尺寸的手机上,字母会被截断

这里唯一的区别是设备的物理尺寸。因此,Kivy 文本似乎不是根据某些基于像素的算法渲染的,而是考虑了屏幕的物理尺寸

有什么方法可以确定 Kivy 中的物理尺寸吗?因此允许我相应地调整字体大小。如果我使用较小 (10sp) 的字体大小,文本在手机(小型设备)上可以正确显示,但在较大的设备上显示太小。

【问题讨论】:

  • 手机上的 Pygame 还是 sdl2?可能与 pygame 相关。
  • 不使用 PyGame。 Kivy 1.9.1 和 sdl2
  • 你能发布你的代码吗?

标签: python kivy


【解决方案1】:

是的,您可以使用 kivy 确定屏幕的物理尺寸 - 你可以简单地使用这个模块:

(from kivy.core.window import Window)

然后通过这样写来确定大小:

(Window.size)

检查此代码(此代码确定简单标签上的屏幕物理尺寸):

⬇️⬇️

from kivy.app import App
from kivy.uix.label import Label
from kivy.core.window import Window

class MyApp(App):

   def build(self):

     window_sizes=Window.size

     return Label(text="screen sizes= "+str(window_sizes))

MyApp().run()

【讨论】:

  • Window.size 不是设备的物理尺寸。它是实际窗口的大小。我也在寻找相同的...
【解决方案2】:

可以获取屏幕尺寸,但需要先安装plyer,在打包前还要安装patch,以便获取信息。

或者只使用普通的pyjnius 并使用autoclass 访问android.util.DisplayMetrics

【讨论】:

    【解决方案3】:

    据我了解,您在通过多种设备正确显示文本时遇到问题。现在,我不认为您可以通过 Kivy 本身获得设备的实际尺寸,但是使用普通的旧 python,您可以。

    Python 中的示例:

    import gtk
    
    window = gtk.Window()
    
    screen = window.get_screen()
    print "screen size: %d x %d" % (
    gtk.gdk.screen_width(),gtk.gdk.screen_height())        
    

    上面的代码将打印出屏幕的高度和宽度,或分辨率,供您使用。

    将它们存储在变量中:

    import gtk
    
    window = gtk.Window()
    
    screen = window.get_screen()
    ScreenWidth = gtk.gdk.screen_width()
    ScreenHeight = gtk.gdk.screen_height()
    # And to prove it worked (You would not want to include this part in code
    #########################################################################
    print str(ScreenWidth) + 'x' + str(ScreenHeight)
    

    现在你有了这些变量,你可以在你的 .kv 文件中使用它们,通过从 python 文件中提取它们,或者以某种方式将整个函数直接实现到你的 Kivy 代码中。

    【讨论】:

    • 嗨 Moosez。你已经准确地理解了我的问题。然而,让 gtk 和 kivy 一起工作似乎没有那么简单。它在模拟器中运行良好,但是当我尝试在设备上使用它时它崩溃:(对不起。gtk 'plain old python'?
    • GTK 是一个完全不同的工具包,我认为它甚至不支持 android。
    【解决方案4】:

    来自:https://kivy.org/docs/api-kivy.metrics.html 我们了解到“sp”是与比例无关的像素大小。因此它已经包含了像素密度,并且每个设备上的字体大小都相同(至少应该如此)。

    字体被裁剪的原因是容器的大小。您还应该给出所需的尺寸,就像在这个例子中一样(注意:如果你想要一个特定的高度,你必须包括 size_hint_y: None 参数)

    TextInput:
            id: text_input
            size_hint_y: None
            height: '30sp'
            multiline: False
    

    【讨论】:

      【解决方案5】:

      我最终做的是最大化我的窗口以获得最大允许的非全屏尺寸,然后读取该尺寸。我实际上用它来在屏幕上将一个较小的窗口居中:

      #-- maximize first, to get the screen size, minus any OS toolbars
      Window.maximize()
      maxSize = Window.system_size
      
      #-- set the actual window size, to be slightly smaller than full screen
      desiredSize = (maxSize[0]*0.9, maxSize[1]*0.9)
      Window.size = desiredSize
      
      #-- center the window
      Window.left = (maxSize[0] - desiredSize[0])*0.5
      Window.top = (maxSize[1] - desiredSize[1])*0.5
      

      请注意,通过首先最大化我的窗口,我将获得最大允许大小,减去任何操作系统的工具栏等,即当您按下最大化按钮时窗口的大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-25
        • 2015-07-11
        • 1970-01-01
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多