小编ekh*_*oro的帖子

PyQt4:窗口显示在hide()和show()之后的另一个位置

使用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)

窗口消失并出现,但略低于原始位置的右侧.我认为它被实际小部件周围窗口管理器框架的大小所取代.

如何将窗口放置在确切的位置?为什么它会移动?它不应该留在原地吗?

python positioning window pyqt

6
推荐指数
1
解决办法
1920
查看次数

如何从现有窗口创建新的PyQt4窗口?

我一直在尝试使用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)

python window pyqt qt-designer pyuic

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

如何在QMenu中隐藏子菜单

我有一个生成菜单项的应用程序,我想设置特定子菜单的可见性.

我试过用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"的子菜单

任何人都可以给我一个想法......

python hide pyqt4 submenu

6
推荐指数
1
解决办法
3620
查看次数

如何在没有中央窗口小部件(PyQt4)的应用程序中设置QDockWidget初始(默认)大小?

我有一个包含大量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)

python qt pyqt pyqt4 qdockwidget

6
推荐指数
1
解决办法
8850
查看次数

我可以使用SIP为我​​的Qt C++库生成Python绑定,然后在PySide中调用它吗?

由于许可证,我必须选择PySide.但它的Shiboken工具缺乏文档.我无法成功为我的Qt C++库生成绑定.

看起来SIP至少在文档部分更成熟.我可以使用SIP生成绑定,然后在PySide上运行我的python代码来调用绑定吗?我的用户环境是Windows XP + Python 2.7 + PySide 1.1.2(基于Window安装程序,安装到C:\ Python27\Lib\site-packages\PySide).

c++ python qt pyside python-sip

6
推荐指数
0
解决办法
360
查看次数

SystemError:QtCore 初始化失败,但未引发异常

我试图用 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)

这里有什么问题吗?我还没有通过谷歌或这里找到任何与我的问题相同的东西。

python pyqt matplotlib qtcore

6
推荐指数
1
解决办法
8127
查看次数

更改变量值时的 PyQt 事件

我有一个变量 t

t = 0

我想在 t 值改变时开始一个事件。如何 ?没有 valuechanged.connect 属性或任何变量...

python variables events signals-slots pyqt4

6
推荐指数
1
解决办法
4665
查看次数

从 Python 线程更新 PyQt GUI

我有一个用 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)

multithreading python-3.x progress-bar pyqt5

6
推荐指数
1
解决办法
6962
查看次数

asyncore python挂起

我尝试用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)

python asyncore

5
推荐指数
1
解决办法
909
查看次数

使用 QTreeView 行中的文本对齐方式错误

我有一个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 pyqt text-alignment pyqt4 qtreeview

5
推荐指数
1
解决办法
1990
查看次数