- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
晚上好,我正在尝试通过按下按钮在 QLABEL 中生成动画,然后在该动画之后转到下一个窗口。
这是我正在做的事情的总结示例,因为在我的原始项目中,由于程序执行的过程,需要大约 5 秒的时间才能进入程序,所以我的意图是,当这段时间在 QLABEL 中运行动画时.
为此我使用此代码:
主程序.py
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import uic
from FirebaseLogin import *
from contraInicio import ContraInicioC
#from Principal import PrincipalC
#from MostrarDatosTabla import mostararDatos
#from CrearFirebase import crear_tabla
#from sucursalInicio import sucursal
#import sqlite3
class LoginC(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
uic.loadUi("Interfaz/Login.ui",self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.l_permiso.setAttribute(QtCore.Qt.WA_NoMousePropagation)
self.l_sucursal.setAttribute(QtCore.Qt.WA_NoMousePropagation)
self.l_close.clicked.connect(self.close)
self.contraseña = ContraInicioC()
#self.principal = PrincipalC()
self.l_entrar.clicked.connect(self.setDataPrincipal)
self.l_permiso.currentIndexChanged.connect(lambda:self.cambioPermiso(self.l_permiso.currentText()))
self.l_permiso.setCurrentText("Caja")
self.suc = "Exxe 1"
self.l_sucursal.setCurrentText(self.suc)
#self.principal.pc_fecha.setDate(QtCore.QDate.currentDate())
@QtCore.pyqtSlot(str)
def cambioPermiso(self,permiso):
if permiso == "Administrador":
self.l_sucursal.setEnabled(True)
else:
self.l_sucursal.setEnabled(False)
def setDataPrincipal(self):
movi = QtGui.QMovie("giphy.gif")
self.label.setMovie(movi)
movi.start()
self.estado = 0
fechaActual = QtCore.QDate.currentDate().toPyDate()
ref = db.reference("/"+str(fechaActual))
ret = ref.get()
if ret == None:
self.contraseña.show()
else:
self.contraseña.show()
self.close()
def mousePressEvent(self,event):
if event.button() == QtCore.Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
event.accept()
def mouseMoveEvent(self,event):
if event.buttons() == QtCore.Qt.LeftButton:
self.move(event.globalPos() - self.dragPosition)
event.accept()
app = QApplication([])
l = LoginC()
l.show()
app.exec_()
contraInicio.py
from PyQt5.QtWidgets import QDialog, QApplication, QMessageBox
from PyQt5 import QtCore
from PyQt5 import uic
#from Contraseñas import passwordLogin
#from Principal import PrincipalC
#from MostrarDatosTabla import mostararDatos
#from CrearFirebase import crear_tabla
class ContraInicioC(QDialog):
def __init__(self):
QDialog.__init__(self)
uic.loadUi("Interfaz/Contraseña.ui",self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
#self.principal = PrincipalC()
#boton de validación
self.validar.clicked.connect(self.validacion)
self.c1Close.clicked.connect(self.close)
self.permiso = None
self.turno = None
self.sucursal = None
self.estado = None
self.referencia = None
def validacion(self):
#self.datos(self.permiso,self.turno,self.sucursal,self.estado,self.referencia)
if self.password.text() == "esther":
print("ok")
else:
print("error")
def mousePressEvent(self,event):
if event.button() == QtCore.Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
event.accept()
def mouseMoveEvent(self,event):
if event.buttons() == QtCore.Qt.LeftButton:
self.move(event.globalPos() - self.dragPosition)
event.accept()
#mostararDatos(str(QtCore.QDate.currentDate().toPyDate()),sucursal,turno,self.principal.saldo,self.principal.tablaM,self.principal.inventario,referencia)
#app = QApplication([])
#l = ContraInicioC()
#l.show()
#app.exec_()
登录.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>650</width>
<height>370</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="styleSheet">
<string notr="true">background:url(Imagenes/escalado.jpg);
background-position:center;
background-repeat:none;</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="l_close">
<property name="geometry">
<rect>
<x>620</x>
<y>0</y>
<width>31</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">QPushButton#l_close{
background:none;
border:0px;
color:grey;
}
QPushButton#l_close:hover{
color:red;
}</string>
</property>
<property name="text">
<string>X</string>
</property>
</widget>
<widget class="QPushButton" name="l_entrar">
<property name="geometry">
<rect>
<x>550</x>
<y>330</y>
<width>75</width>
<height>22</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QPushButton#l_entrar{
background:#41CD52;
border:0px;
color:white;
}
QPushButton#l_entrar:pressed{
border-bottom:2px solid green;
}
</string>
</property>
<property name="text">
<string>Entrar</string>
</property>
</widget>
<widget class="QComboBox" name="l_sucursal">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>440</x>
<y>330</y>
<width>69</width>
<height>22</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QComboBox#l_sucursal{
background:none;
border:0px;
border-bottom: 1px solid lightblue;
color:#05839C;
}
QComboBox QAbstractItemView
{
border:0px;
background:white;
color: grey;
}
QComboBox#l_sucursal::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
width: 15px;
color: white;
border-left-width: 0px;
border-left-color: darkgray;
border-left-style: solid; /* just a single line */
border-top-right-radius: 3px; /* same radius as the QComboBox */
border-bottom-right-radius: 3px;
padding-left: 10px;
}</string>
</property>
<item>
<property name="text">
<string>Exxe 1</string>
</property>
</item>
<item>
<property name="text">
<string>Exxe 3</string>
</property>
</item>
</widget>
<widget class="QLabel" name="lsucursal">
<property name="geometry">
<rect>
<x>380</x>
<y>330</y>
<width>51</width>
<height>22</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">color:grey;
background:none;</string>
</property>
<property name="text">
<string>Sucursal:</string>
</property>
</widget>
<widget class="QLabel" name="la">
<property name="geometry">
<rect>
<x>220</x>
<y>330</y>
<width>51</width>
<height>22</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">color:grey;
background:none;</string>
</property>
<property name="text">
<string>Permisos</string>
</property>
</widget>
<widget class="QComboBox" name="l_permiso">
<property name="geometry">
<rect>
<x>268</x>
<y>330</y>
<width>91</width>
<height>22</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QComboBox#l_permiso{
background:none;
border:0px;
border-bottom: 1px solid lightblue;
color:#05839C;
}
QComboBox QAbstractItemView
{
border:0px;
background:white;
color: grey;
}
QComboBox#l_permiso::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
width: 15px;
color: white;
border-left-width: 0px;
border-left-color: darkgray;
border-left-style: solid; /* just a single line */
border-top-right-radius: 3px; /* same radius as the QComboBox */
border-bottom-right-radius: 3px;
padding-left: 10px;
}</string>
</property>
<item>
<property name="text">
<string>Administrador</string>
</property>
</item>
<item>
<property name="text">
<string>Caja</string>
</property>
</item>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>110</x>
<y>100</y>
<width>231</width>
<height>111</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>
Contraseña.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>302</width>
<height>156</height>
</rect>
</property>
<property name="windowTitle">
<string>Validación</string>
</property>
<property name="styleSheet">
<string notr="true">background:rgb(116, 116, 116);</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>80</x>
<y>20</y>
<width>141</width>
<height>20</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">color:white;</string>
</property>
<property name="text">
<string>Ingrese clave de acceso</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLineEdit" name="password">
<property name="geometry">
<rect>
<x>60</x>
<y>60</y>
<width>181</width>
<height>21</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background:none</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QPushButton" name="validar">
<property name="geometry">
<rect>
<x>200</x>
<y>120</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QPushButton#validar{
background:rgb(56, 213, 47);
border:0px;
color:white;
}
QPushButton#validar:pressed{
border-bottom:2px solid green;
}</string>
</property>
<property name="text">
<string>Validar</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
<widget class="QFrame" name="frame">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>311</width>
<height>16</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background:#0F5D8D;</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
<widget class="QPushButton" name="c1Close">
<property name="geometry">
<rect>
<x>286</x>
<y>0</y>
<width>16</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color:white;
background:none;
border:0px;</string>
</property>
<property name="text">
<string>X</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
FirebaseLogin.py
import firebase_admin
from firebase_admin import credentials, db
cred = credentials.Certificate('login.json')
firebase_admin.initialize_app(cred,{
'databaseURL':'https://exe-tablas.firebaseio.com/'
})
最佳答案
由于问题不是 QMovie
,问题是对 Firebase
的请求,这是一个阻塞任务,因此该任务必须在另一个线程中执行,因此我们避免阻止 GUI,阻止 gif 显示动画,创建一个允许将数据从辅助线程发送到主线程的信号,如下所示:
import threading
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from FirebaseLogin import db
from contraInicio import ContraInicioC
class LoginC(QtWidgets.QMainWindow):
firebaseFinished = QtCore.pyqtSignal(object)
def __init__(self, parent=None):
super(LoginC, self).__init__(parent)
uic.loadUi("Interfaz/Login.ui",self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.l_permiso.setAttribute(QtCore.Qt.WA_NoMousePropagation)
self.l_sucursal.setAttribute(QtCore.Qt.WA_NoMousePropagation)
self.l_close.clicked.connect(self.close)
self.contraseña = ContraInicioC()
self.l_entrar.clicked.connect(self.setDataPrincipal)
self.l_permiso.currentIndexChanged.connect(self.cambioPermiso)
self.l_permiso.setCurrentText("Caja")
self.l_sucursal.setCurrentText("Exxe 1")
self.firebaseFinished.connect(self.on_firebaseFinished)
@QtCore.pyqtSlot()
def cambioPermiso(self):
self.l_sucursal.setEnabled(self.l_permiso.currentText() == "Administrador")
def setDataPrincipal(self):
movi = QtGui.QMovie("giphy.gif")
self.label.setMovie(movi)
movi.start()
fechaActual = QtCore.QDate.currentDate().toPyDate()
path = "/{}".format(fechaActual)
threading.Thread(target=self.get_data, args=(path,), daemon=True).start()
def get_data(self, path):
ref = db.reference(path)
ret = ref.get()
self.firebaseFinished.emit(ret)
def on_firebaseFinished(self, ret):
print("result", ret)
self.contraseña.show()
self.close()
def mousePressEvent(self,event):
if event.button() == QtCore.Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
event.accept()
def mouseMoveEvent(self,event):
if event.buttons() == QtCore.Qt.LeftButton:
self.move(event.globalPos() - self.dragPosition)
event.accept()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
l = LoginC()
l.show()
sys.exit(app.exec_())
关于qlabel 中的 python 错误 : can not show . gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52884600/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!