我QPushButton在Qt Designer中创建了这个样式表:
QPushButton#pushButton {
background-color: #ffffff;
}
QPushButton#pushButton:disabled {
background-color: yellow;
}
QPushButton#pushButton:pressed {
background-color: orange;
}
QPushButton#pushButton:focus:pressed {
background-color: black;
}
QPushButton#pushButton:focus {
background-color: green;
}
QPushButton#pushButton:hover {
background-color: red;
}
QPushButton#pushButton:checked {
background-color: pink;
}
Run Code Online (Sandbox Code Playgroud)
它工作,但当我在属性中检查"平",然后它不再工作,我想问你为什么?我怎么能这样做,如果我需要平板QPushButton?
我正在尝试在Ubuntu,Qt 5.6上执行QCamera示例.观察到"缺少相机服务"消息.
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera"
Run Code Online (Sandbox Code Playgroud) 我正在使用给定的代码,我希望用户在 QLineEdit 小部件中输入文本,按复制!按钮并查看输入的文本替换“N/A”标签。我的问题是:按照此过程,如何通过简单的鼠标单击清除 QLineEdit 小部件中输入的文本?
从我读到的(this、this和this)来看,我似乎需要在扩展 QLineEdit 的新类中重新实现 focusInEvent()。我的问题是我的 GUI 代码是使用 pyuic5 从 Qt Designer 导入的,上面引用的示例似乎没有考虑到这一点。
这是我的代码:
from PyQt5.QtWidgets import *
import sys
import QLineEdit_test
class MainWindow(QMainWindow, QLineEdit_test.Ui_QLineEdit_test):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.copy_button.clicked.connect(self.copy_and_print)
def copy_and_print(self):
self.label.setText(self.lineEdit.text())
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
app.exec_()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
这是我转换后的 .ui 文件:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_QLineEdit_test(object):
def setupUi(self, QLineEdit_test):
QLineEdit_test.setObjectName("QLineEdit_test")
QLineEdit_test.resize(300, 200)
QLineEdit_test.setMaximumSize(QtCore.QSize(300, 200))
self.centralwidget = …Run Code Online (Sandbox Code Playgroud) I\xc2\xb4m 尝试对网站进行多处理抓取,在其中我获取要从中获取信息的所有节点的列表,然后生成一个池,这样它就不会并行地逐一获取数据。我的代码如下:
\n\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport multiprocessing\n\ndef ResPartido(node):\n\n ft=node.find_element_by_css_selector(\'.status\').text\n if ft.strip()!=\'FT\': return\n hora=node.find_element_by_css_selector(\'.time\').text\n names=list()\n for nam in node.find_elements_by_xpath(\n \'.//td[contains(@style,"text-align")]/a[contains(@id,"team")]\'):\n name=nam.text\n if \'(N)\' in name:\n name=name.split(\'(N)\')[0]\n names.append(name)\n score=node.find_element_by_css_selector(\'.red\')\n\n return [hora,name,score.text]\n\nif __name__ == "__main__":\n\n browser=webdriver.Chrome()\n SOME CODE\n nodes=browser.find_elements_by_xpath(\n \'//tr[contains(@align,"center")]/following-sibling::tr[.//div[contains(@class,"toolimg")]]\')\n p = multiprocessing.Pool()\n\n p.map(ResPartido,nodes) <---Here is the error\n .......\n\n >>AttributeError: Can\'t pickle local object \'_createenviron.<locals>.encodekey\'\nRun Code Online (Sandbox Code Playgroud)\n\n我的 python 终端出现错误的图像
\n\n
检查文档,它说列表是可选择的对象,并且在主函数之前声明的函数也是如此,所以我不\xc2\xb4t明白使用多处理时我做错了什么。
\n有没有办法在ListView中的某个事件上隐藏特定项?
到目前为止,我可以通过设置做到这一点visible,以false和height为代表的零.
但是,如果我将listView中的间距设置为2,例如,此解决方案似乎已被破坏.
我试图将 QHBoxlayout 中的每个小部件对齐到顶部,但我得到的是每个小部件似乎都居中。我认为这是由于尺寸不同造成的。
例如:
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class SurfViewer(QMainWindow):
def __init__(self, parent=None):
super(SurfViewer, self).__init__()
self.parent = parent
self.setFixedWidth(300)
self.setFixedHeight(100)
self.wid = QWidget()
self.setCentralWidget(self.wid)
self.groups = QHBoxLayout()
l_a1 = QLabel('A')
a = QVBoxLayout()
a.addWidget(l_a1)
self.groups.addLayout(a)
l_a2 = QLabel('A')
l_b2 = QLabel('B')
a_b = QVBoxLayout()
a_b.addWidget(l_a2)
a_b.addWidget(l_b2)
self.groups.addLayout(a_b)
l_a3 = QLabel('A')
l_b3 = QLabel('B')
l_c3 = QLabel('C')
a_b_c = QVBoxLayout()
a_b_c.addWidget(l_a3)
a_b_c.addWidget(l_b3)
a_b_c.addWidget(l_c3)
self.groups.addLayout(a_b_c)
self.groups.setAlignment(Qt.AlignTop)
self.wid.setLayout(self.groups)
if __name__ == '__main__':
app …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Pycharm 中运行此代码,但出现以下错误:
TypeError: expected str, bytes or os.PathLike object, not NoneType
Run Code Online (Sandbox Code Playgroud)
这适用于 Windows 10,在 Pycharm 上运行,python 3.7
import os
import time
file_path = os.path.join(os.getenv("HOME"), "birth_day_lookup.txt")
def check_birthday():
lookup_file = open(file_path, 'r')
today = time.strftime('%d-%B')
flag = 0
for entry in lookup_file:
if today in entry:
line = entry.split(' ')
flag = 1
os.system('notify-send "Today is '+line[1]+' '+line[2]+'\'s Birthday"')
if flag == 0:
os.system('notify-send "No birthday for today is listed"')
check_birthday()
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现 Strategy 设计模式,以便为以模块化方式实现的底层算法创建一个接口。
目前,根据下面的代码,我有一个顶级/父抽象类 ( ParentAbstractStrategy),它定义了该strategy方法的基本接口。
我也有一个从这个抽象类 ( ChildAbstractStrategy)向下一级。
我有两个抽象类的原因是因为它们需要保存的属性;见__init__方法。
ChildAbstractStrategy是一种特殊情况,ParentAbstractStrategy因为它存储了一个附加属性:attr2。否则它的接口是相同的,如相同的strategy方法签名所见。
有时,我希望能够直接子类化ParentAbstractStrategy并实现strategy方法(请参阅ConcreteStrategyA),但有时我希望能够子类化ChildAbstractStrategy,因为需要额外的属性(请参阅ConcreteStrategyB)。
另一个复杂问题是,在任一抽象类的某些子类中,我希望能够处理strategy方法中的其他参数。这就是为什么我添加**kwargs到该strategy方法的所有签名中的原因,以便我可以根据具体情况将我想要的任何其他参数传递给子类。
这就产生了最后一个问题:这些额外的参数在子类中不是可选的。例如,在strategy方法ConcreteStrategyB我想肯定的是,来电者在第三个参数传递。我基本上是在滥用**kwargs提供可能应该是位置参数的内容(因为我不能给它们合理的默认值并且需要强制执行它们的存在)。
这种**kwargs在子类中用于“方法重载”的当前解决方案感觉非常混乱,我不确定这是否意味着类继承方案或接口设计存在问题,或两者兼而有之。
有没有办法以更简洁的方式实现这些设计目标。感觉就像我在这里错过了一些大图,也许类/界面设计很糟糕。也许为该strategy方法创建两个具有不同签名的不相交抽象类?
import abc
class ParentAbstractStrategy(metaclass=abc.ABCMeta):
@abc.abstractmethod
def __init__(self, attr1):
self.attr1 = attr1
@abc.abstractmethod
def strategy(self, arg1, arg2, **kwargs):
raise NotImplementedError
class ChildAbstractStrategy(ParentAbstractStrategy, metaclass=abc.ABCMeta):
@abc.abstractmethod …Run Code Online (Sandbox Code Playgroud) python abstract-class strategy-pattern keyword-argument python-3.x
所以我的环境是:
我得到以下信息(在 shell 中):
(base) C:\Users\bbate>activate keras-gpu
(keras-gpu) C:\Users\bbate>spyder
Attribute Qt::AA_UseSoftwareOpenGL must be set before QCoreApplication is created.
[968:13624:1108/111945.157:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
Run Code Online (Sandbox Code Playgroud)
然而,Spyder4 启动并工作,但它时不时地挂起,我看到其他注释表明它与 qt dll 有关,但我不知道如何解决这个问题
我看过各种帖子,但没有解决这个错误
顺便说一句,这是一个“干净”的安装;驱动器刚刚重建,所有东西都是全新安装的,所以周围没有太多杂乱,其他版本等。
是否可以让 UDP 服务器作为异步函数运行,接收数据,然后将其传递给也作为异步函数运行的 (PyQt5) 小部件?
这个想法是,当进入服务器的数据更新时,它也会更新小部件。
我已经有一个简单的 UDP 服务器和一个(PyQt5)小部件,它们独立工作正常,但我正在努力尝试将它们组合起来并保持它们异步运行并交换数据(服务器将数据传输到小部件)
[更新]
下面是我正在尝试的一个小部件
import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow
import asyncio
class Speedometer(QMainWindow):
angleChanged = QtCore.pyqtSignal(float)
def __init__(self, parent = None):
QtWidgets.QWidget.__init__(self, parent)
self._angle = 0.0
self._margins = 20
self._pointText = {0: "40", 30: "50", 60: "60", 90: "70", 120: "80",
150:"" , 180: "", 210: "",
240: "0", 270: "10", 300: "20", 330: "30", 360: ""}
def paintEvent(self, event):
painter = QtGui.QPainter()
painter.begin(self)
painter.setRenderHint(QtGui.QPainter.Antialiasing) …Run Code Online (Sandbox Code Playgroud)