标签: pyqt5

pyqt:如何将样式表应用于自定义窗口小部件

# -*- coding: utf-8 -*-

import sys
from PyQt4.QtGui import *  
from PyQt4.QtCore import * 

class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setFixedWidth(200)
        self.setFixedHeight(200)

        stylesheet = \
            ".QWidget {\n" \
            + "border: 20px solid black;\n" \
            + "border-radius: 4px;\n" \
            + "background-color: rgb(255, 255, 255);\n" \
            + "}"
        self.setStyleSheet(stylesheet)

if __name__ == '__main__':

    app = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

我想用样式表添加边框到自定义小部件,但样式表似乎不起作用,有什么不对吗?

python pyqt pyqt4 qtstylesheets pyqt5

10
推荐指数
2
解决办法
4万
查看次数

通过pyqtdeploy和Qt5将PyQt5应用程序部署到Android

可能吗?我的意思是,是的,pyqtdeploy介绍页面说:"pyqtdeploy是一个部署PyQt应用程序的工具.它支持部署到桌面平台(Linux,Windows和OS/X)和移动平台(iOS,Android和Windows RT)."

我已经安装了Qt 5.3.0 for Android及其所有先决条件(SDK,NDK等).此外,我在QtCreator中使用简单的按钮和标签制作了测试项目,用于测试部署.一切都好.下一步是尝试pyqtdeploy来制作Qt项目,非常简单.但是当我试图构建这个项目时,链接器说没有QtCore,QtWidget库.我可以认识到,我没有静态链接的PyQt库,必须为arm架构编译它们.这样对吗?但后来我意识到,python库本身也必须是arm编译的.我可以在Qt中从源代码构建这个库吗?

搜索什么也没做.如果这是真的,为什么没有人(河岸,python)没有手臂编译库?也许我很想念一些东西.在这种情况下,我有更多的全球性问题.

如何使用pyqtdeploy和Qt 5.3.0 for Android将PyQt5.3 Python 3.4应用程序部署到Android?

android qt5 python-3.4 pyqt5 pyqtdeploy

10
推荐指数
1
解决办法
4413
查看次数

PyQt5中的connect()方法在哪里?

我正在关注Rapid GUI Programming with Python and Qt正在使用PyQt4的Mark Summerfield .我更喜欢使用PyQt5,但我的机器上都有.我正在书中进行第二次练习,内容如下:

from __future__ import division
import sys
from math import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.browser = QTextBrowser()
        self.lineedit = QLineEdit("Type an expression and press Enter")
        self.lineedit.selectAll()
        layout = QVBoxLayout()
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.lineedit.setFocus()
        # This line fails:
        self.connect(self.lineedit, SIGNAL("returnPressed()"), self.updateUi)
        self.setWindowTitle("Calculate")


    def updateUi(self):
        try:
            text = unicode(self.lineedit.text())
            self.browser.append("%s = <b>%s</b>" % (text, eval(text)))
        except:
            self.browser.append(
                    "<font color=red>%s is …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt pyqt5

10
推荐指数
1
解决办法
2万
查看次数

如何使用PyQt5的QWebEngineView"渲染"HTML

如何使用PyQt5 v5.6 QWebEngineView"渲染"HTML?

我之前使用PyQt5 v5.4.1 QWebPage执行了该任务,但建议尝试使用较新的QWebEngineView.

这是实现(它通常按预期工作,但有一些站点和情况无限期挂起):

def render(source_html):
    """Fully render HTML, JavaScript and all."""

    import sys
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWebKitWidgets import QWebPage

    class Render(QWebPage):
        def __init__(self, html):
            self.html = None
            self.app = QApplication(sys.argv)
            QWebPage.__init__(self)
            self.loadFinished.connect(self._loadFinished)
            self.mainFrame().setHtml(html)
            self.app.exec_()

        def _loadFinished(self, result):
            self.html = self.mainFrame().toHtml()
            self.app.quit()

    return Render(source_html).html

import requests
sample_html = requests.get(dummy_url).text
print(render(sample_html))
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用QWebEngineView.首先,在Ubuntu上安装和设置PyQt5 v5.6:

# install PyQt5 v5.6 wheel from PyPI
pip3 install --user pyqt5

# link missing resources
ln -s ../resources/icudtl.dat ../resources/qtwebengine_resources.pak …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt5

10
推荐指数
3
解决办法
1万
查看次数

退出/退出PyQt程序的正确方法

我有一个具有登录屏幕的脚本,如果按下取消按钮,我想完全退出应用程序.我试过3种方法:

  1. sys.exit()
  2. QApplication.quit()
  3. QCoreApplication.instance()退出()

只有1号才有效.另外两个使对话框变白,然后闪烁然后挂起,我甚至无法切换到其他应用程序.我的代码如下:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *


import csv
import sys
from datetime import datetime, timedelta, time
import os

from ci_co_table import *
from login import *

class Ci_Co(QMainWindow):
    """Check in and check out module"""

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

class Login(QDialog):
    """User login """
    def __init__(self):
        QDialog.__init__(self)
        self.ui = Ui_login_form()
        self.ui.setupUi(self)
        self.ui.buttonBox.accepted.connect(lambda: self.handle_login(servers=servers))
        servers = {}
        with open('servers.csv', newline='') as csvfile: …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt5

10
推荐指数
2
解决办法
3万
查看次数

pyqtgraph 轴显示不正确

我最近在将 pyqt 从 PyQt4 更新到 PyQt5 后开始使用 PyQt5,并注意到使用 pyqtgraph 生成的所有绘图的轴位置存在持续错误(参见附图)。x 轴不延伸穿过窗口底部,y 轴不与左下角的 x 轴连接。此外,在较大的 x 值或较小的 y 值处,轨迹不能由轴标签准确地表示。

下图是通过运行产生的:

import pyqtgraph as pg
pg.plot([0,1,2,3,4,5,6,7,8,9],[1,2,4,5,7,8,10,11,13,14])
Run Code Online (Sandbox Code Playgroud)

pyqtgraph输出

我在我的 Windows 10 机器上使用 anaconda 创建了一个新的 python 环境来测试这个问题。conda list qt的输出是:

pyqt                      5.6.0                    py35_2
pyqtgraph                 0.10.0                   py35_0
qt                        5.6.2                    vc14_5  [vc14]
Run Code Online (Sandbox Code Playgroud)

我尝试使用不同版本的 Python(3.5.3 和 3.6)并删除并重新安装所有 anaconda 发行版,但没有成功。我真的很感激任何有关这个问题的帮助。提前致谢。

编辑 1:我应该提到我是在外部显示器上运行这个程序的。我刚刚发现,如果我将绘图窗口拖动到较小的笔记本电脑显示屏上,轴就会捕捉到正确的位置。我仍然没有发现如何在外部显示器上正确显示绘图,但我怀疑它可能与 QT DPI 缩放环境变量有关。

python qt pyqtgraph pyqt5 windows-10

10
推荐指数
1
解决办法
2992
查看次数

Python 3.6.x PyInstaller给出错误"没有名为'PyQt5.sip'的模块"

我开发了一些在Python 3.5.4上运行良好的程序,但由于win32的一些错误让我进入Python 3.6.4,但是当我使用pyinstaller构建我的项目时,我得到:

C:\Users\User\Desktop\dist\mycommentator>mycommentator.exe
Traceback (most recent call last):
  File "mycommentator.py", line 6, in <module>
  File "c:\users\user\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module
    module = loader.load_module(fullname)
ModuleNotFoundError: No module named 'PyQt5.sip'
[1532] Failed to execute script mycommentator
Run Code Online (Sandbox Code Playgroud)

我试图重新安装python,所以我安装了Python 3.6.4/Python 3.6.5,这个错误也发生在我身上.无论我在PyQt5中构建什么代码,每次都出现此错误.

我也尝试移动sip.pyd到项目文件夹,但仍然发生错误.我也尝试过pip install --upgrade sip,但没有帮助.我也尝试安装pyinstaller的开发版本,这也没有帮助.

python sip pyinstaller pyqt5

10
推荐指数
1
解决办法
1万
查看次数

使用PyQt4刮取Javascript驱动的网页 - 如何访问需要身份验证的网页?

我必须在我们公司的内部网上抓一个非常非常简单的页面,以便自动化我们的一个内部进程(将函数的输出返回成功与否).

我找到了以下示例:

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *

class Render(QWebPage):
  def __init__(self, url):
    self.app = QApplication(sys.argv)
    QWebPage.__init__(self)
    self.loadFinished.connect(self._loadFinished)
    self.mainFrame().load(QUrl(url))
    self.app.exec_()

  def _loadFinished(self, result):
    self.frame = self.mainFrame()
    self.app.quit()

url = 'http://sitescraper.net'
r = Render(url)
html = r.frame.toHtml()
Run Code Online (Sandbox Code Playgroud)

来自http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in-python.html,它几乎是完美的.我只需要能够提供身份验证来查看页面.

我一直在查看PyQt4的文档,我承认很多都是我的头脑.如果有人可以提供帮助,我会很感激.

编辑: 不幸的是gruszczy的方法对我不起作用.当我通过urllib2做了类似的事情时,我使用了以下代码并且它有效...

username = 'user'
password = 'pass'

req = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (username, password))[:-1]
authheader = "Basic %s" % base64string
req.add_header("Authorization", authheader)

handle = urllib2.urlopen(req)
Run Code Online (Sandbox Code Playgroud)

python ssl pyqt web-scraping pyqt5

9
推荐指数
1
解决办法
6797
查看次数

多继承元类冲突

我需要一个类的双重继承.我尝试了几种语法,但我不理解元类的概念.

from PyQt5.QtGui import QStandardItem
from configparser import ConfigParser

class FinalClass(ConfigParser, QStandardItem):
    def __init__(self, param):
        ConfigParser.__init__(self)
        QStandardItem.__init__(self)
Run Code Online (Sandbox Code Playgroud)

python pyqt multiple-inheritance python-3.x pyqt5

9
推荐指数
2
解决办法
5341
查看次数

Python内核为第二轮PyQt5 GUI而死

  • 在Python 3.5.2中使用Spyder | Anaconda 4.2.0(64位)Windows软件包.qt:5.6.0
  • 首次运行时,GUI窗口按预期打开
  • 对于第二次运行,没有任何打开,并且接收内核死亡,重新启动日志消息.

gui1.py:

import sys from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

w = QWidget()

w.resize(250,150) w.show()

#sys.exit(app.exec_()) 
app.exec_()
Run Code Online (Sandbox Code Playgroud)

IPhython日志:

runfile('F:/work/ws_python/TestProj1/gui1/gui1.py', wdir='F:/work/ws_python/TestProj1/gui1')

runfile('F:/work/ws_python/TestProj1/gui1/gui1.py', wdir='F:/work/ws_python/TestProj1/gui1')

Kernel died, restarting

Kernel died, restarting

Kernel died, restarting
Run Code Online (Sandbox Code Playgroud)

为什么内核为第二次运行而死,以及如何解决它?

(即使使用#sys.exit(app.exec_())作为最后一行,也要这样做.)

python ipython spyder anaconda pyqt5

9
推荐指数
1
解决办法
5104
查看次数