小编Cry*_*ite的帖子

删除虚线边框而不在Windows PyQt中设置NoFocus

关于这一点有几个问题,所有这些似乎都说除去虚线边框的唯一方法是将有问题的widget/item上的focusPolicy设置为NoFocus.虽然这可以作为临时修复,但这可以防止在其他必要的focusEvents领域与所述小部件/项目进一步交互.

所述边界有问题:

虚线焦点? 边界

这是为什么这不起作用的一个例子.

  • 我有一个非模态小部件弹出窗口,想象一个图像的灯箱.
  • 我想在窗口小部件外部检测mousePressEvent并因此关闭窗口小部件.要做到这一点,我应该抓住focusOutEvent.
  • 但是,如果我的程序中的绝大多数小部件被设置为NoFocus(以消除边界问题),那么我无法捕获focusOutEvent,因为您猜对了,它们没有焦点策略.

这是另一个例子:

  • 我有一个子类的QTreeWidget,所以我可以出于各种原因捕获keyPressEvents.
  • QTreeWidget也设置为NoFocus以防止边框.但是,由于这个原因,小部件永远不会有焦点,因此不能捕获keyPressEvents.
  • 这个(kludgy,imo)的解决方法是使用小部件的grabKeyboard类,如果我以后忘记释放Keyboard,这是危险的.这不是最佳选择.

那么问题是,有没有办法删除这个奇怪的(大多数只是丑陋的)虚线边框而不关闭我的应用程序中的所有内容的焦点?提前致谢!

qt focus border pyqt

17
推荐指数
2
解决办法
7920
查看次数

使用lxml.etree移动整个元素

在lxml中,在给定元素的情况下,是否有可能将整个内容移动到xml文档中的其他位置,而无需读取所有子项并重新创建它?我最好的例子就是改变父母.我有点翻遍文档,但运气不好.提前致谢!

python xml lxml

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

在PyQt中设置QCompleter的弹出窗口样式

是否可以将样式表应用于与QCombobox绑定的QCompleter的弹出部分?如果没有,它是否需要委托魔法?如果是这样的话,那甚至可能如何工作,往往会让我感到困惑.这是我的小部件代码:

class autoFillField(QComboBox):
    def __init__(self, parent=None):
        super(autoFillField, self).__init__(parent)

        self.setFocusPolicy(Qt.NoFocus)
        self.setEditable(True)

        self.addItem("")

        self.pFilterModel = QSortFilterProxyModel(self)
        self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
        self.pFilterModel.setSourceModel(self.model())

        self.completer = QCompleter(self.pFilterModel, self)
        self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
        self.setCompleter(self.completer)
        self.setStyleSheet(STYLING FOR COMBOBOX HERE, BUT NOT POPUP)

        self.lineEdit().textEdited[unicode].connect(self.pFilterModel.setFilterFixedString)

    def on_completer_activated(self, text):
        if text:
            index = self.findText(text)
            self.setCurrentIndex(index)

    def setModel(self, model):
        super(autoFillField, self).setModel(model)
        self.pFilterModel.setSourceModel(model)
        self.completer.setModel(self.pFilterModel)

    def setModelColumn(self, column):
        self.completer.setCompletionColumn(column)
        self.pFilterModel.setFilterKeyColumn(column)
        super(autoFillField, self).setModelColumn(column)
Run Code Online (Sandbox Code Playgroud)

弹出式样式是否会发生在组合框类中,还是会发生在通过addItems输入数据的外部?提前致谢.

python qt4 pyqt styling

7
推荐指数
1
解决办法
3272
查看次数

优化PyQt应用程序

对于那些编写了相当复杂的PyQt应用程序的人,您会为加速应用程序提供哪些提示和技巧?我有几个例子说明我的程序随着它变大而开始变慢的地方:

  • 我编写了一个"仪表板",当用户点击TreeWidget中的项目时,该仪表板被销毁并重新创建.有一个模块化界面的更好方法是单击TreeWidget中的项目更改仪表板,但不需要销毁小部件并重新创建它.

  • 每个仪表板还从网络位置加载图像.这会在应用程序中导航时产生一些减速,但在将其加载到内存后,"返回到相同的破折号"会更快.是否有一种好的方法或方法可以在程序加载时运行一个可能会将图像预先加载到内存中的方法?如果是这样,你如何实现?

  • 如果您有大量的仪表板项目和数据加载到它们中,您是否通常将数据加载线程并加载回来,每个线程完成?当有人快速浏览时,这是否可行?是否会为线程实现kill-switch,以便当用户更改仪表板时,线程会工作?或者不断创建和杀死线程会导致某种程度的崩溃.

对于大量的问题感到抱歉,但它们似乎相似,足以将它们捆绑在一起.

python optimization pyqt

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

获取调用Python脚本的快捷方式的目录

如何获取调用Python脚本的Windows快捷方式的目录。我想在各个地方有多个快捷方式,这些快捷方式指向一个脚本,如果需要,可以编辑该脚本,但是可以从中调用脚本的目录。这可能吗?

然后,该脚本可能会使用py2exe或类似的东西进行编译,因此,如果直到那个阶段才有可能进行编译,我可以这样做。谢谢!

python directory

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

QtSql vs MySQLdb vs SQLAlchemy

我正在开发一个PyQt程序,很快就会从xml类型的后端切换到本地MySQL服务器上托管的后端.我一直在试图阅读这三个选项中的每一个,但认为最好问你们这些神.

我目前使用MySQLdb执行MySQL的经验并且一直在使用它主要是由于对其他两种方法的存在的无知.简而言之,每个人的优点/缺点是什么,你会选择哪个?干杯!

python mysql pyqt

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

在 PyQt 中正确定位弹出窗口小部件

这个问题困扰了我很多年,主要是因为移动小部件之类的方法有很多种组合。本质上,我有一个简单的小部件,我希望能够在我的应用程序的特定区域中弹出它。问题是我似乎永远无法让它出现在我想要的地方。此外,我想以一种可以根据它是否弹出以指向应用程序左上角的小部件而不是底部的小部件来调整它的“指针”侧的方式进行设置 -正确的。

理想情况下,我能够将弹出窗口放置在靠近父窗口小部件边缘的位置,并根据它所在的位置对其进行锚定。这就是我一直在尝试的。

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

class popup(QWidget):
    def __init__(self, parent = None, widget=None):    
        QWidget.__init__(self, parent)
        layout = QGridLayout(self)
        button = QPushButton("Very Interesting Text Popup. Here's an arrow   ^")
        layout.addWidget(button)
        self.move(widget.rect().bottomLeft())

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.button = QPushButton('Hit this button to show a popup', self)
        self.button.clicked.connect(self.handleOpenDialog)
        self.button.move(250, 50)
        self.resize(600, 200)

    def handleOpenDialog(self):
        self.popup = popup(self, self.button)
        self.popup.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

此代码生成一个随机位于小部件中间的按钮。在这个例子中,我想要得到的是,弹出窗口显示在按钮下方,其“枢轴”位于右上角,这样弹出按钮中的箭头将指向小部件的右下角。然而,它却弹出在窗口的左上角。在我对 .move、.setGeometry 和 …

python pyqt css-position popup

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

用于PyQT标签的鼠标悬停事件过滤器

我一直在努力的例子转换这里有一个简单的标签工作.

这是代码:

class mouseoverEvent(QtCore.QObject):
    def __init__(self, parent):
        super(mouseoverEvent, self).__init__(parent)
    def eventFilter(self, object, event):
        if event.type() == QtCore.QEvent.MouseMove:
            print "mousemove!"

self.filter = mouseoverEvent(self)
self.label.installEventFilter(self.filter)
Run Code Online (Sandbox Code Playgroud)

现在奇怪的是,这实际上是有效的,但不是没有我的控制台被"mousemove"垃圾邮件!(好)以及错误:TypeError:来自mouseoverEvent.eventFilter()的无效结果类型

我还没有弄清楚事件之间的复杂关系,所以这对我来说有点希望.那么,是什么给出的?

提前致谢.

python pyqt mouseover

4
推荐指数
1
解决办法
5775
查看次数

正确处理Subclassed PyQT LineEdit中的keyPressEvent

所以我有一个QLineEdit,我想抓住一个Shift键盘.

这是我的代码:

class NoteText(QtGui.QLineEdit):
    def __init__(self, parent):
        super (NoteText, self).__init__(parent)

    def keyPressEvent(self, event):
        if (event.modifiers() & QtCore.Qt.ShiftModifier):
            self.shift = True
            print 'Shift!'
Run Code Online (Sandbox Code Playgroud)

你可以猜到,我可以捕捉shift键,但是你不能在LineEdit中输入文本.我试过捕捉按键,但我不确定如何处理它们以允许用户继续键入小部件.

我错过了什么?谢谢!

python pyqt subclassing

4
推荐指数
1
解决办法
3835
查看次数

将外部文件拖放到QTreeWidget中

我想QTreeWidget的实现并不完全相同,但我希望能够将外部文件,特别是图像或电影文件放入我的QTreeWidget中.我不是想把它拖到一个特定的QTreeWidgetItem中,而是整个树.这是我的代码:

class moTree(QTreeWidget):
    def __init__(self, parent):
        super(moTree, self).__init__(parent)
        self.setMouseTracking(True)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls:
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasUrls:
            for url in event.mimeData().urls():
                #Handle stuff here
        else:
            event.ignore()  
Run Code Online (Sandbox Code Playgroud)

正在调用dragEnterEvent,但是dropEvent不是,我正在获取'被阻止'图标.有什么想法吗?

python pyqt

4
推荐指数
1
解决办法
715
查看次数