python 您能否获得器械的kivy物理尺寸?

gijlo24d  于 2023-03-16  发布在  Python
关注(0)|答案(6)|浏览(146)

有人知道Kivy是怎么用不同的字体渲染文本的吗?
我在16 sp有带文本的标签。
在屏幕尺寸(1024,552)和(2048,1536)的平板电脑上,它可以完美地工作(宽/高比分别为1.855和1.333)x1c 0d1x
在屏幕大小为(1280,720)(比例为1.778)的PC上,它也能完美地显示,但在屏幕大小为这种大小的手机上,字母被截断为

这里唯一的区别是设备的物理大小。因此,Kivy文本不是根据一些基于像素的算法渲染的,而是考虑到了屏幕的物理大小
是否有任何方法可以确定Kivy的物理大小?因此允许我相应地调整字体大小。如果我使用较小的(10 sp)字体大小,文本在手机(小型设备)上显示正确,但在较大的设备上显示太小。

hgtggwj0

hgtggwj01#

是的,你可以用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()
xesrikrc

xesrikrc2#

获得屏幕大小是可能的,但您需要安装plyer,并在打包之前也安装patch,以便您可以访问信息。
或者只使用普通的pyjnius并通过autoclass访问android.util.DisplayMetrics

r55awzrz

r55awzrz3#

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

#-- 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

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

qxgroojn

qxgroojn4#

据我所知,您在多个设备上正确显示文本时遇到了问题。现在,我不认为您可以通过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代码中实现整个函数。

okxuctiv

okxuctiv5#

https://kivy.org/docs/api-kivy.metrics.html中我们得知“sp”是与比例无关的像素大小,因此它已经包含了像素密度,并且字体大小在每个设备上都是相同的(至少应该是相同的)。
字体被裁剪的原因是因为容器的大小。你也应该给予所需的大小,就像这个例子(注意:如果你想要一个特定的高度,你必须包括size_hint_y:无参数)

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

wz1wpwve6#

下面是另一个解决方案,它在Android或iOS上测试/运行时将应用设置为全屏,但在桌面上测试时使用合理的大小(602,1024):

from kivy.utils import platform

class MyApp(App):
    def build(self):
        if(platform == 'android' | platform == 'ios'):
            Window.maximize()
        else:
            Window.size = (620, 1024)

        return kv

if __name__ == "__main__":
    MyApp().run()

相关问题