GVKun编程网logo

time.sleep()和BackGround Windows PyQt5

9

本篇文章给大家谈谈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

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'' 无法找到问题

''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文件是系统定义的各种主题属性,例如

  1. <!-- 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">

<body>的background-image和background-color层次问题_html/css_WEB-ITnose

的background-image和background-color层次问题_html/css_WEB-ITnose

body { background-image:url(pics/bg.png); background-repeat:repeat; background-color:#069;}
登录后复制

设置成这样,但背景颜色总是会覆盖在背景图片上,怎么能让背景图片在背景颜色上从而不受背景颜色影响?

回复讨论(解决方案)

你路径写错了呗。

背景图片,会覆盖背景色的,看下路径,在调试工具里,看下这个图片,是不是成功加载过来了。

图片路径不对吧

你路径写错了呗。

背景图片,会覆盖背景色的,看下路径,在调试工具里,看下这个图片,是不是成功加载过来了。
很确定背景图片已经加载了,和背景颜色叠加在一起出现了奇特的效果。

你确定加载了,那就看下,body下的第一个子元素,是不是占据整个body的,是不是你在这个子元素上面,设置了颜色。

再仔细检查下你的代码,颜色覆盖背景图片。还真是没有见过。

你把body的颜色去掉,看看会不会出背景色,就能确定,是不是背景图片被颜色覆盖了。

background:#069 url(pics/bg.png) no-repeat center center;

你的背景图片是png格式的,不要告诉我,撒是png这个你不懂

你的背景图片是png格式的,不要告诉我,撒是png这个你不懂
好吧,是图片半透明了

android:attr / selectableItemBackground在白色windowBackground上不起作用

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的区别_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的相关信息,请在本站寻找。

本文标签: