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

这是为什么这不起作用的一个例子.
这是另一个例子:
那么问题是,有没有办法删除这个奇怪的(大多数只是丑陋的)虚线边框而不关闭我的应用程序中的所有内容的焦点?提前致谢!
在lxml中,在给定元素的情况下,是否有可能将整个内容移动到xml文档中的其他位置,而无需读取所有子项并重新创建它?我最好的例子就是改变父母.我有点翻遍文档,但运气不好.提前致谢!
是否可以将样式表应用于与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输入数据的外部?提前致谢.
对于那些编写了相当复杂的PyQt应用程序的人,您会为加速应用程序提供哪些提示和技巧?我有几个例子说明我的程序随着它变大而开始变慢的地方:
我编写了一个"仪表板",当用户点击TreeWidget中的项目时,该仪表板被销毁并重新创建.有一个模块化界面的更好方法是单击TreeWidget中的项目更改仪表板,但不需要销毁小部件并重新创建它.
每个仪表板还从网络位置加载图像.这会在应用程序中导航时产生一些减速,但在将其加载到内存后,"返回到相同的破折号"会更快.是否有一种好的方法或方法可以在程序加载时运行一个可能会将图像预先加载到内存中的方法?如果是这样,你如何实现?
如果您有大量的仪表板项目和数据加载到它们中,您是否通常将数据加载线程并加载回来,每个线程完成?当有人快速浏览时,这是否可行?是否会为线程实现kill-switch,以便当用户更改仪表板时,线程会工作?或者不断创建和杀死线程会导致某种程度的崩溃.
对于大量的问题感到抱歉,但它们似乎相似,足以将它们捆绑在一起.
如何获取调用Python脚本的Windows快捷方式的目录。我想在各个地方有多个快捷方式,这些快捷方式指向一个脚本,如果需要,可以编辑该脚本,但是可以从中调用脚本的目录。这可能吗?
然后,该脚本可能会使用py2exe或类似的东西进行编译,因此,如果直到那个阶段才有可能进行编译,我可以这样做。谢谢!
我正在开发一个PyQt程序,很快就会从xml类型的后端切换到本地MySQL服务器上托管的后端.我一直在试图阅读这三个选项中的每一个,但认为最好问你们这些神.
我目前使用MySQLdb执行MySQL的经验并且一直在使用它主要是由于对其他两种方法的存在的无知.简而言之,每个人的优点/缺点是什么,你会选择哪个?干杯!
这个问题困扰了我很多年,主要是因为移动小部件之类的方法有很多种组合。本质上,我有一个简单的小部件,我希望能够在我的应用程序的特定区域中弹出它。问题是我似乎永远无法让它出现在我想要的地方。此外,我想以一种可以根据它是否弹出以指向应用程序左上角的小部件而不是底部的小部件来调整它的“指针”侧的方式进行设置 -正确的。
理想情况下,我能够将弹出窗口放置在靠近父窗口小部件边缘的位置,并根据它所在的位置对其进行锚定。这就是我一直在尝试的。
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 和 …
我一直在努力的例子转换这里有一个简单的标签工作.
这是代码:
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()的无效结果类型
我还没有弄清楚事件之间的复杂关系,所以这对我来说有点希望.那么,是什么给出的?
提前致谢.
所以我有一个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中输入文本.我试过捕捉按键,但我不确定如何处理它们以允许用户继续键入小部件.
我错过了什么?谢谢!
我想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不是,我正在获取'被阻止'图标.有什么想法吗?