使用PyQt4,当我隐藏窗口并在之后显示它时,它出现在另一个位置(至少在Linux上).示例代码:
#!/usr/bin/python3
from PyQt4.QtGui import *
app = QApplication([])
widget = QWidget()
widget.setLayout(QVBoxLayout())
label = QLabel()
widget.layout().addWidget(label)
def hideShow():
widget.hide()
widget.show()
widget.layout().addWidget(QPushButton('Hide/Show', clicked = hideShow))
widget.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
窗口消失并出现,但略低于原始位置的右侧.我认为它被实际小部件周围窗口管理器框架的大小所取代.
如何将窗口放置在确切的位置?为什么它会移动?它不应该留在原地吗?
我一直在尝试使用python3和Qt4从现有窗口调用一个新窗口.
我使用Qt Designer(主应用程序和另一个)创建了两个窗口,我将Qt Designer生成的.ui文件转换为.py脚本 - 但我似乎无法从主应用程序创建新窗口.
我试过这样做:
############### MAIN APPLICATION SCRIPT ################
from PyQt4 import QtCore, QtGui
import v2
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(194, 101)
self.button1 = QtGui.QPushButton(Form)
self.button1.setGeometry(QtCore.QRect(50, 30, 99, 23))
self.button1.setObjectName(_fromUtf8("button1"))
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.button1.setText(QtGui.QApplication.translate("Form", "Ventana", None, QtGui.QApplication.UnicodeUTF8))
self.button1.connect(self.button1, QtCore.SIGNAL(_fromUtf8("clicked()")), self.mbutton1)
def mbutton1(self):
v2.main()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form() …Run Code Online (Sandbox Code Playgroud) 我有一个生成菜单项的应用程序,我想设置特定子菜单的可见性.
我试过用setVisibility(False),但这没用.
setVisibility()适用于菜单项,但不适用于QMenus中的子菜单.
看看下面的代码片段:
import sys
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.menu = QtGui.QMenu()
self.actio1 = QtGui.QAction('One', self)
self.actio2 = QtGui.QAction('Two', self)
self.menu.addAction(self.actio1)
self.menu.addAction(self.actio2)
self.actio1.setVisible(False)
self.submenu = QtGui.QMenu('submenu', self)
self.submenu.addAction('sub one')
self.submenu.addAction('sub two')
self.menu.addMenu(self.submenu)
self.submenu2 = QtGui.QMenu('submenu 2', self)
self.submenu2.addAction('sub 2 one')
self.submenu2.addAction('sub 2 two')
self.menu.addMenu(self.submenu2)
self.submenu2.setVisible(False)
layout = QtGui.QHBoxLayout()
layout.addWidget(self.menu)
self.setLayout(layout)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我可以隐藏名为"One"的菜单项,但不能隐藏名为"submenu 2"的子菜单
任何人都可以给我一个想法......
我有一个包含大量QDockWidgets并且没有中央小部件的应用程序.我想设置一些QDockWidgets初始大小(应用程序启动时的大小),但我不想限制它们的最小/最大大小.
怎么做?例如,我需要将初始大小设置为150x75到其中一个.我尝试了明显的方法(例如与停靠窗口小部件内容相关的QWidget.Resize()),但它根本不起作用.
这是一个简化的情况模型:
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([''])
mw = QtGui.QMainWindow() # mw = MainWindow
mw.setCentralWidget(None)
mw.showMaximized()
mw.dockWdg1 = QtGui.QDockWidget(mw)
mw.content1 = QtGui.QTreeWidget()
mw.dockWdg1.setWidget(mw.content1)
mw.addDockWidget(QtCore.Qt.DockWidgetArea(2), mw.dockWdg1)
mw.dockWdg1.setWindowTitle("1st dock widget")
mw.dockWdg2 = QtGui.QDockWidget(mw)
mw.content2 = QtGui.QTreeWidget()
mw.dockWdg2.setWidget(mw.content2)
mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg2)
mw.dockWdg2.setWindowTitle("2nd dock widget")
mw.dockWdg3 = QtGui.QDockWidget(mw)
mw.content3 = QtGui.QTreeWidget()
mw.dockWdg3.setWidget(mw.content3)
mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg3)
mw.dockWdg3.setWindowTitle("3rd dock widget")
mw.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud) 由于许可证,我必须选择PySide.但它的Shiboken工具缺乏文档.我无法成功为我的Qt C++库生成绑定.
看起来SIP至少在文档部分更成熟.我可以使用SIP生成绑定,然后在PySide上运行我的python代码来调用绑定吗?我的用户环境是Windows XP + Python 2.7 + PySide 1.1.2(基于Window安装程序,安装到C:\ Python27\Lib\site-packages\PySide).
我试图用 matplotlib 绘制一些东西,但是当我像这样导入它时:
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
在 Pycharm Community 2016.1.4 使用 Anaconda 版本 3.5.1 时,我收到此错误:
from PyQt4 import QtCore
SystemError: initialization of QtCore failed without raising an exception
Run Code Online (Sandbox Code Playgroud)
这里有什么问题吗?我还没有通过谷歌或这里找到任何与我的问题相同的东西。
我有一个变量 t
t = 0
我想在 t 值改变时开始一个事件。如何 ?没有 valuechanged.connect 属性或任何变量...
我有一个用 Designer (pyqt5) 制作的 GUI。我的主类中的函数需要在单独的线程上工作。我还在操作期间捕捉 QtextEdit LIVE 上的标准输出。到目前为止一切正常。
现在我正在尝试在我的主 GUI 窗体上实现一个 ProgressBar。该栏需要显示实时进度,就像在文本编辑上一样。
下面的示例代码在 Linux 上运行,没有任何警告。但在 Windows 上我收到错误:
QObject::setParent: Cannot set parent, new parent is in a different thread
Run Code Online (Sandbox Code Playgroud)
我知道这是因为我在线程函数中修改了 ui 元素。我做了研究,但所有答案都指向使用 QThreads(就在我开始了解基本线程时!)。我更喜欢一种无需更改下面当前线程系统即可更新 GUI 的方法。
这是示例代码:
import sys
import threading
import time
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QObject, pyqtSignal
from PyQt5.QtGui import QTextCursor
from ui_form import Ui_Form
class EmittingStream(QObject):
textWritten = pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text))
class Form(QMainWindow):
finished = pyqtSignal()
def __init__(self, parent=None):
super(Form, self).__init__(parent)
# Install …Run Code Online (Sandbox Code Playgroud) 我尝试用asyncore做简单的异步http客户端:这段代码工作正常,输出是(快速执行):
www.gmail.com : recv http code: 301
www.yandex.ru : recv http code: 200
www.python.org : recv http code: 200
www.google.ru : recv http code: 200
www.gravatar.com : recv http code: 302
www.com.com : recv http code: 302
www.yahoo.com : recv http code: 302
www.bom.com : recv http code: 301
Run Code Online (Sandbox Code Playgroud)
但是,与我不存在主机的取消注释:
#c = AsyncHTTP('http://www.no-such-host.ru') #!this line breaks execution!
Run Code Online (Sandbox Code Playgroud)
执行中断,代码挂起一段时间,输出部分数据并挂起,没有最后的数据输出:
connection error: [Errno -5] No address associated with hostname
www.gmail.com : recv http code: 301
www.yandex.ru : recv http code: 200
www.yahoo.com …Run Code Online (Sandbox Code Playgroud) 我有一个QTreeView(带有PyQt4),使用下面的代码自定义和调整大小的图标,但“大小”列显示错误的对齐/位置,如下所示:

self.ui.treeView.setIconSize(QtCore.QSize(30,30))
fileSystemModel = QtGui.QFileSystemModel(self.ui.treeView)
custonIconProvider = CustomIconsProvider()
fileSystemModel.setIconProvider(custonIconProvider)
self.ui.treeView.setModel(fileSystemModel)
self.ui.treeView.setRootIndex(fileSystemModel.setRootPath(forlderPath))
self.ui.treeView.setColumnWidth(0, 250)
self.ui.treeView.setColumnWidth(1, 70)
self.ui.treeView.setColumnWidth(2, 70)
Run Code Online (Sandbox Code Playgroud)
我已经搜索了http://pyqt.sourceforge.net/Docs/PyQt4/qtreeview.html文档以寻找可能的修复方法,但找不到任何明显的内容。
python ×9
pyqt ×5
pyqt4 ×4
qt ×2
window ×2
asyncore ×1
c++ ×1
events ×1
hide ×1
matplotlib ×1
positioning ×1
progress-bar ×1
pyqt5 ×1
pyside ×1
python-3.x ×1
python-sip ×1
pyuic ×1
qdockwidget ×1
qt-designer ×1
qtcore ×1
qtreeview ×1
submenu ×1
variables ×1