我必须在我们公司的内部网上抓一个非常非常简单的页面,以便自动化我们的一个内部进程(将函数的输出返回成功与否).
我找到了以下示例:
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) 我需要一个类的双重继承.我尝试了几种语法,但我不理解元类的概念.
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) 我正在尝试创建一个基于PyQt5和asyncio的新应用程序(使用python 3.4,期待最终使用async/await升级到3.5).我的目标是使用asyncio,以便即使应用程序等待某些连接的硬件完成操作,GUI也能保持响应.
在查看如何合并Qt5和asyncio的事件循环时,我发现了一个邮件列表发布,建议使用quamash.但是,在运行此示例(未修改)时,
yield from fut
Run Code Online (Sandbox Code Playgroud)
nevers似乎又回来了.我看到输出'Timeout',所以定时器回调显然会触发,但Future未能唤醒等待方法.当手动关闭窗口时,它告诉我有未完成的期货:
Yielding until signal...
Timeout
Traceback (most recent call last):
File "pyqt_asyncio_list.py", line 26, in <module>
loop.run_until_complete(_go())
File "/usr/local/lib/python3.5/site-packages/quamash/__init__.py", line 291, in run_until_complete
raise RuntimeError('Event loop stopped before Future completed.')
RuntimeError: Event loop stopped before Future completed.
Run Code Online (Sandbox Code Playgroud)
我在使用python 3.5的Ubuntu和使用3.4的Windows上测试了这个,在两个平台上都有相同的行为.
无论如何,由于这不是我实际尝试实现的,我还测试了一些其他代码:
import quamash
import asyncio
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
@asyncio.coroutine
def op():
print('op()')
@asyncio.coroutine
def slow_operation():
print('clicked')
yield from op()
print('op done')
yield from asyncio.sleep(0.1)
print('timeout expired') …Run Code Online (Sandbox Code Playgroud) gui1.py:
Run Code Online (Sandbox Code Playgroud)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_()
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_())作为最后一行,也要这样做.)
我仍然在为我的数据库的GUI工作,现在我有一个不同的错误:
Traceback (most recent call last):
File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 84, in <module>
ex = Ui_MainWindow()
File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 16, in __init__
self.setupUi(self)
File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 55, in setupUi
MainWindow.setCentralWidget(self.centralwidget)
AttributeError: 'Ui_MainWindow' object has no attribute 'setCentralWidget'
Run Code Online (Sandbox Code Playgroud)
我不了解PyQt的事情,所以我不明白问题是什么.
代码是:(这是编辑版本,原始版本发布如下)
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Main_Menu.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will …Run Code Online (Sandbox Code Playgroud) 我在Windows上用Python 3.6编写了一个PyQt5应用程序,该应用程序在Windows上完美运行,我使用PyInstaller制作一个.exe文件来运行应用程序,效果很好!
是否可以让我的应用在Android上运行?我试过PyQtDeployment没有成功.
有什么建议?
我有一个带有a的GUI,QDockwidget我希望如果用户用鼠标光标悬停在它上面,则停靠窗口小部件标题栏的颜色会改变颜色.我在下面有一个小测试程序,当光标位于标题栏上方时,标题栏会改变颜色.但是,如果光标位于停靠窗口小部件的其余部分上方,它也会更改颜色.有没有什么办法解决这一问题?
CSS = """
QDockWidget::title {
background-color: lightblue;
border: 1px solid black;
}
QDockWidget::title:hover {
background: yellow;
}
QMainWindow::separator {
background: palette(Midlight);
}
QMainWindow::separator:hover {
background: palette(Mid);
}
"""
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt, QSize
class CenteredLabel(QtWidgets.QWidget):
def __init__(self, text, parent=None):
super().__init__(parent=parent)
self.verLayout = QtWidgets.QVBoxLayout()
self.setLayout(self.verLayout)
self.horLayout = QtWidgets.QHBoxLayout()
self.verLayout.addLayout(self.horLayout)
self.label = QtWidgets.QLabel(text)
self.horLayout.addWidget(self.label)
def sizeHint(self):
return QSize(300, 400)
class MyWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setCentralWidget(CenteredLabel("Central Widget"))
self.dockWidget = QtWidgets.QDockWidget("Dock Title", parent=self)
self.dockWidget.setWidget(CenteredLabel("Dock Widget"))
self.addDockWidget(Qt.LeftDockWidgetArea, …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用许多小部件(QGroupBox、QVBoxLayout、QHBoxLayout)的应用程序。最初它是在普通的高清显示器上开发的。但是,最近我们中的许多人升级到了 4K 分辨率的显示器。现在一些按钮和滑块被压缩得非常小以至于无法使用。
现在我尝试进行一些更改,以便该应用程序可以与 HD 和 4K 显示器一起使用。
我开始阅读以下链接:
https://leomoon.com/journal/python/high-dpi-scaling-in-pyqt5/在此处输入链接描述
我想每当我的窗口在特定监视器中打开时,我都可以调用以下代码:
if pixel_x > 1920 and pixel_y > 1080:
Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, True)
Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
else:
Qapp.setAttribute(Qt.AA_EnableHighDpiScaling, False)
Qapp.setAttribute(Qt.AA_UseHighDpiPixmaps, False)
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用以下代码获取显示器分辨率(pixel_x 和 pixel_y),使用相关帖子here。
import sys, ctypes
user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
screen_width = 0 #78
screen_height = 1 #79
[pixel_x , pixel_y ] = [user32.GetSystemMetrics(screen_width), user32.GetSystemMetrics(screen_height)]
Run Code Online (Sandbox Code Playgroud)
screen_width = 0, screen_height = 1给了我主显示器的分辨率(在我们的案例中主要是笔记本电脑,它们是高清的)。screen_width = 78, screen_height = 79给了我虚拟机的组合分辨率。但我不明白如何根据我的应用程序打开的位置动态获取这些值。
我的应用程序窗口的开发方式是,它将在上次关闭的同一监视器中打开。现在的问题是,每当我的 GUI 被调用并适应该分辨率时,我都想获得活动监视器分辨率。如果有人可以帮助我,我会很高兴。
我很想知道每次将窗口从高清显示器拖动到 4K 显示器时是否可以调用屏幕分辨率计算,反之亦然。
编辑:我在这里的这篇文章中发现了类似的东西,但我无法从中得到太多。
Edit2:基于@Joe …
我有一个使用PySide2它构建的应用程序,setColumnStretch用于列拉伸和setRowStretch行拉伸。它运行良好,但我无法理解它是如何工作的。我参考了 qt 文档,但它对我没有帮助。我被困在这些括号内的两个值上。
例如 :
glay = QtWidgets.QGridLayout(right_container)
glay.addWidget(lineedit, 0, 0)
glay.addWidget(button2, 0, 2)
glay.addWidget(widget, 2, 0, 1, 3)
glay.addWidget(button, 4, 0)
glay.addWidget(button1, 4, 2)
glay.setColumnStretch(1, 1) # setColumnStretch
glay.setRowStretch(1, 1) # setRowStretch
glay.setRowStretch(2, 2) # setRowStretch
glay.setRowStretch(3, 1) # setRowStretch
Run Code Online (Sandbox Code Playgroud)
这会产生如下图所示的输出:
但是如何?这四个值里面有glay.addWidget(widget, 2, 0, 1, 3)什么作用呢?请用例子向我解释这一切。
我正在尝试在 qt 设计器中创建切换按钮。我也在互联网上参考,但我找不到如何做到这一点。谁能知道如何做切换开关按钮。我已附上示例按钮图像。
编辑
我在下面创建了一个文本框,我想要这个切换按钮。当我尝试添加时,它会抛出错误。如何在文本区域下方添加按钮?我也附上了代码片段。
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QPropertyAnimation, QRectF, QSize, Qt, pyqtProperty
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import (
QAbstractButton,
QApplication,
QHBoxLayout,
QSizePolicy,
QWidget,
)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(472, 180)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.url = QtWidgets.QLineEdit(self.centralwidget)
self.url.setGeometry(QtCore.QRect(30, 20, 411, 31))
font = QtGui.QFont()
font.setFamily("MS Shell Dlg 2")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.url.setFont(font)
self.url.setAutoFillBackground(False)
self.url.setStyleSheet("border-radius:10px;")
self.url.setAlignment(QtCore.Qt.AlignCenter)
self.url.setCursorMoveStyle(QtCore.Qt.LogicalMoveStyle)
self.url.setObjectName("url")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 472, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = …Run Code Online (Sandbox Code Playgroud) pyqt5 ×10
python ×9
pyqt ×6
python-3.x ×3
qt-designer ×2
anaconda ×1
android ×1
ipython ×1
qgridlayout ×1
qmainwindow ×1
qt ×1
resolution ×1
spyder ×1
ssl ×1
web-scraping ×1