- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好,抱歉,这将是一个大问题。
我现在遇到一个烦人的小障碍。我正在为工作创建一个RSS风格的应用程序,该应用程序将被放置在整个办公室的一些大型LCD显示屏上。基本概念是进行客户端/服务器设置,其中用户将使用自定义编辑器来创建具有所选字体,粗细,大小等的单个文章,然后将它们上传到服务器(最初)将显示文本在LCD屏幕上使用wx.TextCtrl和wx.TextAttr。
这是我要疯的地方。
我能够轻松创建客户端/服务器,我可以使服务器的显示正常工作,但是我找不到能够从右向左传输文本而不会引起闪烁的方法。我们的显示器为42英寸,我尝试使用多种方法来完成此任务,但是对于这些显示器所需的文本大小,我似乎无法摆脱闪烁。
到目前为止,我已经尝试了三种方法使文本运动:
方法1:wx.Ticker()
这是一个控件,看起来确实可以完成我一直想完成的任务,并且当使用较小的字体时,它实际上可以完全满足我的需要。问题是我们不能使用较小的字体,我们将使用的字体会很大,例如36、48、72等。当使用wxpython演示测试代码时,我无法创建足够平滑的效果来考虑这是完成我的任务的一种可行方法,即使在稍微调整他们的代码之后也是如此。
方法2:FadingTextCtrl()(自定义控件)
前一阵子,很早在我找到wx.Ticker之前,我已经创建了一个控件来实现这一壮举,并且已经在之前的一些项目中成功使用了它。我基本上使用EVT_TIMER设置了TextCtrl,将光标设置在行的开头,然后反复删除文本的第一个字符,速度由EVT_TIMER控制。这出人意料地减少了闪烁的频率,但是当它确实选择闪烁时,它就更加引人注目。另一个缺点是,您需要使用固定宽度的字体来避免在删除字符时出现跳动。如果没有固定宽度的字体,由于宽度变化,某些字符的删除速度会比其他字符快,导致文本的运动随机出现加速和减速,从而无法精确控制速度。
方法3:wx.AnimatedCtrl()和自定义生成的动画GIF
到目前为止,这似乎是我最好的选择。我很亲密!
使用PIL以及我在途中可以通过Google找到的一些随机代码片段,我已经能够生成动画GIF并将其放置在wx.AnimatedCtrl()中。在大屏幕上进行了一些测试之后,最终看起来像是我有了解决方案,因为文字流没有任何闪烁!在gif中添加了更多帧之后,我可以使文本比以前的任何方法更平滑地移动。所以就在这里,没有闪烁,完全平滑,然后最可笑的冲突让我傻了……
在构建了适合于按需创建图像的功能之后,我回到了GUI,开始链接所有控件,收集所有文本及其属性以创建动画GIF。我将其全部推送到函数中,然后让我感到惊讶的是,用wx创建字体的方式与使用PIL的方式不同,更具体地说,是如何指定计划用于文本的字体。例如,wx.Font()使用字体的Facename来指定要使用的字体,其中PIL.ImageFont使用字体的路径/文件名来选择要绘制的字体。
您必须在跟我开玩笑.....现在我距离完成我的项目只有一步之遥,而且我一无所获,无法关联我的字体。我可以输入其余字体信息,但不能告诉PIL.ImageFont使用wx.Font()提供的字体数据使用哪种字体。
所以最后,这是我的问题...如何将wx.Font()中的面孔名称与其实际文件名关联起来,以便找到一种方法告诉PIL.ImageFont使用我在控件中定义的文本属性?
我以为昨晚找到注册表项时就中奖了:
“ HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Fonts”
此项包含一串字符串值,这些字符串值定义了Window可用的字体名称以及它们文件的相关路径。这是“控制面板>>字体”所使用的相同信息,因此您会认为这是我缺少的链接。我迅速构建了另一个模块来为值建立索引并为文本生成选定的面部名称/文件名。对于TTF(TrueType)字体,这似乎工作得很好。
然后另一个障碍击中..
大多数Facename都使用多个字体文件来产生斜体,粗体等效果,但是使用wx.Font()似乎总是使用一个面孔名作为字体,例如“ Tahoma”,并使用其他参数(例如style)来指定效果,重量等。因此对于Tahoma Regular,您可以使用字体文件“ TAHOMA.TTF”,而要使用Tahoma Bold,则可以使用字体文件“ tahomabd.ttf”。就是说,在注册表中找到的面孔名称与wxPython中使用的面孔名称不正确匹配。例如:Tahoma的注册表人名可以是Tahoma(TrueType)或Tahoma Bold(True Type)的粗体,尽管wx.Font()都希望使用“ Tahoma”,并且它将与幕后使用的合适字体文件匹配您提供给控件的其他参数。删除注册表面部名称中的垃圾文本很容易,例如(TrueType)或(VGA res),但是对于某些字体,我仍然留下多个面部名称,但这种字体不会显示。
现在这是我目前所在的位置。
我使用PIL通过创建画布,设置所有文本属性来创建动画gif。
创建两个列表,一个用于文本,一个用于每个文本项的属性。例如:
msgs = [“ ***”,“ Header:”,“要打印到图像文件的消息正文。还有什么要说的?真的吗?!?!?!那里是什么?!?”,“ * **“]
字体= [(font_bold_file,48,“#000000”),(font_bold_file,48,“#000000”),(font_norm_file,48,“#000000”),(font_bold_file,48,“#000000”)]
创建一个空白画布,将文本范围的宽度加倍
遍历列表,将文本写在画布上,右对齐,每帧将文本的posX稍微向左移动。
为了避免wx.Font和PIL.ImageFont之间的面部名称/文件名冲突,我想我应该首先在wxPython中使用文本及其所有属性创建位图,然后将其转换为PIL图像。然后,而不是使用PIL.ImageFont绘制文本,而是在每帧上稍微移动文本的位置,我应该将转换后的wxBitmap粘贴到画布上,使用PIL.Image的粘贴在每帧上稍微移动整个位图?
我在这里遇到的问题是找到使用wx的任何DC(ClientDC,PaintDC,(Auto)BufferedDC,MemoryDC)创建位图的正确方法。到目前为止,我能够使用wxMemoryDC和wxBitmap将文本写入位图,但到目前为止,由于它似乎仅限于窗口的ClientSize,因此我无法找到一种方法来设置位图的完整VirtualSize来包含整个图像。我会从一开始就指定完整大小,但是直到获得消息的文本范围时,我才知道该大小。从长远来看,我宁愿创建wxBitmap也不在控件中显示它,因为它的唯一目的是将其传递给PIL进行进一步处理。
所以这是我求救的地方!有人可以请大家阐明一下我如何找到一种将Wx.Font与PIL.ImageFont相关联的方法,这样我就可以使用我的动画gif生成器来完成已经设置好的工作,或者帮助阐明一下如何使用wxPython创建位图,以及如何绘制文本,以便无论当前的ClientSize如何,所有文本都出现在位图中?我可以轻松地将位图转换为PIL,我只需要首先弄清楚如何使用wx创建位图即可!
非常感谢任何可以提供帮助的人员,对于超长职位我深表歉意,但是我应该在几周前完成该项目。每当我认为找到答案时,这个可笑的字体问题就会不断打我!因为这是一个工作项目,如果您需要任何代码示例,请提出要求,我将在不包含任何与工作相关的信息的情况下进行整理。
最佳答案
您是否考虑过将wx.MemoryDC与双缓冲窗口一起使用(即“ bit blitting”)?基本技术是将文本绘制到DC屏幕外,然后将其“ blit”到屏幕上。这样可以消除闪烁。
这是wx Wiki中的discussion about eliminating flicker。
这是wxpython Wiki中的discussion of double buffering。
关于python - wx.Font使用一个面部名称,而PIL.ImageFont使用一个文件名……有什么办法可以将两者联系起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079033/
将以下内容添加到我的键绑定(bind)中可以让我将 Sublime Text 3 中的字体大小重置为默认大小: { "keys": ["ctrl+0"], "command": "reset_font
我有一个如下所示的 css 字体系列(由于显示限制,我已经缩短了它,否则它比我在这里展示的要大得多)现在你能告诉我是否有办法将 url()content 转换为 .ttf 字体格式或其他标准字体格式吗
具体来说... and ...显示为双倍或四倍。 最佳答案 Customize Twitter Bootstrap here. Make sure to uncheck the default "
当包含 @font-face 和 src 以导入网络字体时,我注意到您可以传入 2 个可选值。我目前不这样做。 我有 2 种网络字体,Lato Regular 和 Lato Bold。 我应该在 @f
我正在本地主机上测试一个字体很棒的网站,它工作正常;但是当我将它上传到我的远程站点时,它不再显示字体了。我该如何解决?尝试了所有调试但没有成功。 网站在那里 www.sevotec.it/ordine
我开始使用 font-squirrel (http://www.fontsquirrel.com/tools/webfont-generator) 来快速使我的字体跨浏览器兼容,我只是想知道字体质量是
以前我复制了一个ttf文件到C:\Windows\Fonts,点击文件显示字体,然后点击[安装],一切正常。 当我现在执行此过程时,字体未安装在 C:\Windows\Fonts 中,而是安装在 C:
我注意到,在工作中,Google Web字体未出现在IE9和Firefox 6(Windows和Mac OS)上。所有文件都已加载,但字体从未渲染。在那些相同的浏览器上,它可以在家正常工作。 Chro
我正在学习 Swift UI 教程,我遇到了这个错误,而讲师没有。 .font 错误在第一个 Vstack 中仅出现一次,而第二次则没有问题。 import SwiftUI struct Conten
我知道使用@font-face 允许浏览器下载自定义字体并在网页中使用它,就像使用任何系统字体一样。 我想知道的是浏览器是对字体进行编码还是在不公开的情况下使用它? 谢谢 最佳答案 浏览器无法保护字体
使用基于@font-face 标记的标准fontsquirrel .. 字体呈现在较粗的一面。下面是一个屏幕截图,以几种不同的方式展示了字体。顶部是 photoshop 的渲染图,第二个是相同字体的
我必须在元素中使用花哨的字体,但我真的很想避免使用 sifr 和其他丑陋的替代品,所以我正在寻找@font-face。 但是,我真的很困惑几个博客/网站提供了关于它的可用性的不同观点。准备好了吗?目前
我几乎在我工作的所有项目中都使用 fontawesome。但这次我得到的图标显示为正方形。我还尝试了 stackoverflow 上列出的几乎所有解决方案,但似乎对我的情况没有任何效果。我猜是什么东西
好的,所以我正在尝试让 IE9 显示字体 Agenda。我像往常一样去了 fontsquirrel,它说 font bureau 不允许他们创建字体套件。然后我去了 codeandmore 并在那里制
Font Awesome 4.0是对 Font Awesome 从头开始的完全重写。主要的新功能之一是图标现在具有命名空间。除了命名空间之外,图标还使用基于一致性和可预测性的新命名约定。不幸的是,
我使用版本 3.2.9 (Media Mark) 的 SASS 并且我想使用我的自定义 font-family 的 3 个变体Source Sans Pro 字体(Light、Regular、Bold
在一些 css 文件中嵌入一些 base64 字体,但 CSP 阻止了这些:类似于 url("data:font/woff;base64,d09GRk9UVE...); 当前 CSP =“base-u
我怎样才能使 Font Awesome 图标像本页中那样大: http://fontawesome.io/icon/bath/ 我使用了 fa-5x 类,但它与页面示例中最大的图标不同。 下面是我使用
我有一个带有Bootsrap 4(SASS)和Font Awesome 5的MVC项目。我正在尝试使旋转的图标可以与Ajax加载面板一起使用,但是它不起作用。 Test Spin
似乎 font-awesome 支持自定义图标,并附有详细说明如何创建和提交您自己的图标,但该信息在他们的网站上不再可用。这是否意味着不再支持此功能并且您只能请求由 font-awesome 团队完成
我是一名优秀的程序员,十分优秀!