本篇文章给大家谈谈time.sleep,以及和BackGroundWindowsPyQt5的知识点,同时本文还将给你拓展''windowBackground''无法找到问题、的background-i
本篇文章给大家谈谈time.sleep,以及和BackGround Windows PyQt5的知识点,同时本文还将给你拓展''windowBackground'' 无法找到问题、的background-image和background-color层次问题_html/css_WEB-ITnose、android:attr / selectableItemBackground在白色windowBackground上不起作用、background-origin和background-clip的区别_html/css_WEB-ITnose等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- time.sleep()和BackGround Windows PyQt5
- ''windowBackground'' 无法找到问题
- 的background-image和background-color层次问题_html/css_WEB-ITnose
- android:attr / selectableItemBackground在白色windowBackground上不起作用
- background-origin和background-clip的区别_html/css_WEB-ITnose
time.sleep()和BackGround Windows PyQt5
鉴于此,我从PyQt5模块开始,我仍在慢慢了解其背后的逻辑。就是说,我有一个我找不到答案的问题,希望您能为我提供帮助。
我有这个脚本:
import sys, socket, timefrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *from io import BytesIO as byclass loadGame(QWidget): wLoadDisplay = 768 hLoadDisplay = 576 wLoadBar = 650 hLoadBar = 40 pbarCSS = """ QProgressBar { font-size: 20px; font-weight: bold; background-color: #FFF; border: 4px solid #000; text-align: center; } QProgressBar::chunk { background-color: #FF0000; width: 1px; } """ labelCSS = """ QLabel { font-size: 20px; font-weight: bold; background-color: #FFF; border: 4px solid #000; } """ fileResource = [] imgResource = [] vidResource = [] audResource = [] diaResource = [] txtResource = [] internetConnection = False def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.outputFile = by() self.pbar = QProgressBar(self) self.pbar.setGeometry((self.wLoadDisplay / 2 - self.wLoadBar / 2), (self.hLoadDisplay / 2 - self.hLoadBar * 2), self.wLoadBar, self.hLoadBar) self.pbar.setFormat("%v/%m") self.pbar.setValue(0) self.pbar.setStyleSheet(self.pbarCSS) self.label = QLabel(self) self.label.setGeometry((self.wLoadDisplay / 2 - self.wLoadBar / 2), (self.hLoadDisplay / 2), self.wLoadBar, self.hLoadBar) self.label.setAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.label.setStyleSheet(self.labelCSS) self.setGeometry(0, 0, self.wLoadDisplay, self.hLoadDisplay) oImage = QImage("bgloading.png") sImage = oImage.scaled(QSize(self.wLoadDisplay, self.hLoadDisplay)) palette = QPalette() palette.setBrush(10, QBrush(sImage)) self.setPalette(palette) qtRectangle = self.frameGeometry() centerPoint = QDesktopWidget().availableGeometry().center() qtRectangle.moveCenter(centerPoint) self.move(qtRectangle.topLeft()) self.run() def run(self): self.checkConnection() if self.internetConnection: self.checkUpdate() else: pass def checkConnection(self): self.objectChange("Check Internet Connection", 1) try: host = socket.gethostbyname("www.google.it") s = socket.create_connection((host, 80), 2) self.internetConnection = True except: pass self.count() self.reset() def checkUpdate(self): pass def objectChange(self, object, n): self.label.setText(object) self.pbar.setMaximum(n) def count(self): self.pbar.setValue(self.pbar.value() + 1) def reset(self): time.sleep(2) self.pbar.setMaximum(0) self.pbar.setValue(0) self.label.setText("...")if __name__ == ''__main__'': loadDisplay = QApplication(sys.argv) load = loadGame() load.show() sys.exit(loadDisplay.exec_())
在网上搜索时,我发现问题与“ time.sleep(2)”有关,也就是说,该指令阻止了直到两秒钟后才出现的窗口。
事实是,我想花一两秒钟的时间来显示该小节的完成,然后重置并继续执行“ def run(self)”中包含的下一条语句。
因此,有没有一种方法可以使该暂停而不使用“时间”模块?我不知道,也许是QTimer?我再说一遍,我对PyQt5不太了解,所以我不知道QTimer是否可以做同样的事情。
如果QTimer无法做到这一点,还有其他可能吗?我想避免使用PyQt5的“线程”,因为我读到可以做到这一点,但是我想避免仅将其用于Timer模块。
我只添加一个问题,以避免打开另一个问题并发布相同的脚本。
在脚本中,通过“ oImage = QImage(“ bgloading.png”)“等完成窗口背景。
但是,我注意到,如果发现文件名错误或文件本身丢失,则背景为黑色。因此,如果有任何错误(名称错误或文件丢失),则可以设置背景,例如白色?
因为当窗口加载“此错误”时,不会引发任何异常并且脚本会继续。
编辑:我已经编辑了发布的脚本,以便它仅包含PyQt5部分,因此您可以尝试一下。显然只有图像丢失了,可以用任何图像替换。
不幸的是,我忘记写报告“
self.set_display()”的部分是为了表明一旦PyQt5执行的工作被终止,它将被关闭(仍然丢失,因为使用Pycharm会关闭执行)程序中脚本的代码)。该脚本将通过调用“
self.set_display()”函数继续。
Edit2:我尝试按照建议替换“
time.sleep(2)”,但得到的结果相同。问题是,如果我不暂停,窗口将正常显示,但是重置发生得太快,用户看不到进度栏的填充。相反,如果我输入“
time.sleep(2)”或建议的解决方案,则该窗口仅在暂停后(即已发生重置时)出现。
答案1
小编典典等效于time.sleep(2)
PyQt的表达式如下:
loop = QEventLoop()QTimer.singleShot(2000, loop.quit)loop.exec_()
造成此问题的原因是您在暂停后显示窗口小部件,您必须在调用之前执行此操作,这run()
也是另一个错误QImage
,因为您必须使用窗口小部件的问题QPixmap
。
如果该文件不存在QPixmap
,则为null,要知道它是否为空,则应使用以下isNull()
方法:
[...] self.setGeometry(0, 0, self.wLoadDisplay, self.hLoadDisplay) palette = self.palette() pixmap = QPixmap("bgloading.png") if not pixmap.isNull(): pixmap = pixmap.scaled(QSize(self.wLoadDisplay, self.hLoadDisplay)) palette.setBrush(QPalette.Window, QBrush(pixmap)) else: palette.setBrush(QPalette.Window, QBrush(Qt.white)) self.setPalette(palette) qtRectangle = self.frameGeometry() centerPoint = QDesktopWidget().availableGeometry().center() qtRectangle.moveCenter(centerPoint) self.move(qtRectangle.topLeft()) self.show() self.run()[...]def reset(self): loop = QEventLoop() QTimer.singleShot(2000, loop.quit) loop.exec_() self.pbar.setMaximum(0) self.pbar.setValue(0) self.label.setText("...")
''windowBackground'' 无法找到问题
主题设置
android中可以通过对activity主题进行设置,可以得到一些特殊的效果,如背景透明、无标题、全屏等,android本身提供了一些主题供开发者选择,具体方法即在manifest文件中相应的<activity>标签下添加android:theme="@android :style/..."即可。,如果要自定义主题,需要在res/values目录下添加style.xml文件,在其中定义所需的属性。
遇到的问题:
应用中需要将一个activity的背景设置为半透明效果,但系统本身提供的选择只有全透明效果,因此需要自定义。
定义activity背景色 <item name="windowBackground">#99cccccc</item>,这样写会报出两种错误,
(1) No resource found that matches the given name: attr ''windowBackground'',即指定的name找不到,这条有时候会通过,但背景不会改变,是漆黑的一片。
(2) Color types not allowed (at ''android:windowBackground'' with value ''#99cccccc''),即对color不能这么写
解决办法:
<item name="android:windowBackground">@color/transparent_background</item>
即name里要添加android:,color要专门在colors.xml文件中具体定义
分析:
<item name="windowBackground">这种写法是在仿照系统api中的style写的,在目录\android-sdk\platforms\android-8\data\res\values下的themes.xml文件是系统定义的各种主题属性,例如
<!-- Window attributes --> <item name="windowBackground">@android:drawable/screen_background_dark</item> <item name="windowFrame">@null</item> <item name="windowNoTitle">false</item> <item name="windowFullscreen">false</item> <item name="windowIsFloating">false</item> <item name="windowContentOverlay">@android:drawable/title_bar_shadow</item> <item name="windowShowWallpaper">false</item> <item name="windowTitleStyle">@android:style/WindowTitle</item> <item name="windowTitleSize">25dip</item> <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item> <item name="android:windowAnimationStyle">@android:style/Animation.Activity</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
不知道为什么系统文件就没有问题。。。总之自定义的话对这些属性值的name需添加android:,形如<item name="android:windowBackground">
的background-image和background-color层次问题_html/css_WEB-ITnose
设置成这样,但背景颜色总是会覆盖在背景图片上,怎么能让背景图片在背景颜色上从而不受背景颜色影响?
回复讨论(解决方案)
你路径写错了呗。
背景图片,会覆盖背景色的,看下路径,在调试工具里,看下这个图片,是不是成功加载过来了。
图片路径不对吧
你路径写错了呗。
背景图片,会覆盖背景色的,看下路径,在调试工具里,看下这个图片,是不是成功加载过来了。
很确定背景图片已经加载了,和背景颜色叠加在一起出现了奇特的效果。
你确定加载了,那就看下,body下的第一个子元素,是不是占据整个body的,是不是你在这个子元素上面,设置了颜色。
再仔细检查下你的代码,颜色覆盖背景图片。还真是没有见过。
你把body的颜色去掉,看看会不会出背景色,就能确定,是不是背景图片被颜色覆盖了。
background:#069 url(pics/bg.png) no-repeat center center;
你的背景图片是png格式的,不要告诉我,撒是png这个你不懂
你的背景图片是png格式的,不要告诉我,撒是png这个你不懂
好吧,是图片半透明了
android:attr / selectableItemBackground在白色windowBackground上不起作用
我想用
?android:attr/selectableItemBackground
我的recyclerview的项目.不幸的是,它不起作用.我的styles.xml文件中包含以下行:
<item name="android:windowBackground">@color/white</item>
没有这条线,我可以看到波纹,这意味着背景os由于窗口背景很白而无法正常工作.如何强制在我的白色背景上出现涟漪效果?
这是recyclerview项目的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/brand_row"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="?android:attr/selectableItemBackground"
android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:textColor="@color/modelTitelColor"
android:text/>
<TextView
android:id="@+id/numbers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:textColor="@color/cardview_background"
android:texthttps://www.jb51.cc/tag/nor/" target="_blank">normal"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/divider"/>
</LinearLayout>
我的minSdkVersion是14
解决方法:
在我的styles.xml中
Theme.AppCompat.NoActionBar
作为父主题.更改为
style name="CustomMaterialTheme" parent="Theme.AppCompat.Light.NoActionBar"
解决了问题.现在我可以看到效果了.
background-origin和background-clip的区别_html/css_WEB-ITnose
background-origin和background-clip是css3内新增加的属性,其实一个是对背景图片的放置,另一个是对背景图片的剪裁。
background-origin和background-clip的选择都一样:content- box,padding-box,border-box(要注意在火狐和Chrome和Safari中,需要使用私有属性,加上-mox-和 -webkit-)
在区别之前,先说明:
这是常见的盒子模型,content、padding、border、margin外围的边线在图中被标识出来,他们在区别3项选择(content- box,padding-box,border-box)中起到了十分重要的作用。
立即学习“前端免费学习笔记(深入)”;
origin的翻译过来时原始的意思。顾名思义,所以background-origin是用来决定图片的原始起始位置,即你可以选择背景图片是从内容区域开始显示,还是内边距,还是边框。
background-origin:margin background-origin:padding background-origin:content
我们看到,当background-origin的值为content-box时,首先会让背景图片的左上角和内容边缘左上角对齐;padding-box时,则会让背景图片的左上角和内边距的左上角对齐。以此类推。可见background-origin的值的确是决定背景图片开始从哪个区域开始显示。
另外,background-origin默认的起始位置在哪呢?这里就不演示了,但要记住??是padding。
接下来介绍background-clip,它的作用为将背景图片做适当的裁剪,以适应需要。当然这里并不是真正意义上的把图片给裁剪了,而是根据属性值。把图片的某些部位做适当的隐蔽。
怎样个剪裁法呢。根据你设置的盒子部位,那么图片在这个部位的外边缘以外的部分都会不可见。
经测试,在火狐、chrome、ie9+浏览器均表现为上图。
由此可见,虽然图片是从顶着边框的左上角进行定位,但是裁剪属性background-clip的属性是设置为content-box,所以只有content区域的内容看得见,也就是只要是在content之外的图片内容都被隐蔽掉了。
如果此篇文章有帮到您,请您帮帮忙动个手指,推荐一下此文吧~谢谢拉~^^
关于time.sleep和和BackGround Windows PyQt5的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于''windowBackground'' 无法找到问题、的background-image和background-color层次问题_html/css_WEB-ITnose、android:attr / selectableItemBackground在白色windowBackground上不起作用、background-origin和background-clip的区别_html/css_WEB-ITnose的相关信息,请在本站寻找。
本文标签: