小编ekh*_*oro的帖子

QDialogBu​​ttonBox 按钮没有响应

当我运行以下函数时,对话框显示所有内容。问题是按钮无法连接。OK 和 Cancel 不响应鼠标点击。

void MainWindow::initializeBOX(){

        QDialog dlg;
        QVBoxLayout la(&dlg);
        QLineEdit ed;
        la.addWidget(&ed);


        //QDialogButtonBox bb(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
        //btnbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
         QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |     QDialogButtonBox::Cancel);

         connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
         connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

         la.addWidget(buttonBox);
         dlg.setLayout(&la);


        if(dlg.exec() == QDialog::Accepted)
        {
            mTabWidget->setTabText(0, ed.text());
        }

      }
Run Code Online (Sandbox Code Playgroud)

在运行时,cmd 中的错误显示:没有像 accept() 和 reject() 这样的插槽。

c++ qt signals-slots qdialog qt-designer

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

setItemDelegateForColunm() 在没有堆栈跟踪的情况下导致应用程序崩溃

问题:

当在 TreeView 上的每行或列设置 QtstyledItemDelegate 时,我的应用程序崩溃,没有任何进一步的信息。尽管如此,为整个 TreeView 设置 QStyledItemDelegate 的工作在我看来似乎很奇怪。

有谁知道这是否是一个已知的错误,或者我错过了什么

我正在将 PySide 1.1.2 与 Qt 4.8 一起使用(更改版本并不是真正的选择,因为这将是一个很大的开销,因为它是一个也在集群上运行的分布式应用程序,其中版本更新将包含大量开销。 .)

这是一个“最小运行示例”

from PySide import QtGui, QtCore
import sys
import easymodel

class MainWin(QtGui.QMainWindow):
    def __init__(self, model, parent=None):
        super(MainWin, self).__init__(parent)

        treeview = QtGui.QTreeView()
        treeview.setItemDelegateForColumn(0,QtGui.QStyledItemDelegate()) 
        treeview.setModel(model)
        self.setCentralWidget(treeview)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    root = easymodel.TreeItem(easymodel.ListItemData(["Test","Values","Perhabs a button"]))
    model = easymodel.TreeModel(root)    
    for i in range(1,10):
        easymodel.TreeItem(easymodel.ListItemData(["Test","Values","Perhabs a button"]),
                           parent = root,
                           index=model.index(root.child_count(),1,
                                             parent = root.index()))    


mainWin = MainWin(model)
mainWin.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

作为模型,我使用 github 上提供的 …

python qtreeview pyside qstyleditemdelegate

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

如何在 PySide 中从 .ui 文件加载子项?

现在我像这样加载它们:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    loader = QUiLoader()
    file = QFile('main.ui')
    file.open(QFile.ReadOnly)
    window = loader.load(file)
    file.close()
    window.show()
    # Here:
    window.centralwidget.findChild(QListWidget, 'listWidget').addItems(['Item {0}'.format(x) for x in range(100)])
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

但我认为这很不舒服,有没有其他方法,可能加载整个命名空间或其他什么?

python user-interface qt-designer pyside uic

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

QSortFilterProxyModel过滤完成信号

我正在使用自定义QSortFilterProxyModelQTableView通过覆盖来实现自定义过滤filterAcceptsRow().如何在更改过滤条件时通知我的应用程序,并将filterAcceptsRow()其应用于整个表格后?

基本上,我希望在应用过滤后获得可见项目的列表,目前我通过我在模型中实现的自定义函数计算此列表,该函数迭代行并获得可见行列表.这是低效的,因为如果在它们之间没有发生过滤动作,则对该函数的两次调用将产生相同的结果.

qt pyqt qtableview python-3.x qsortfilterproxymodel

4
推荐指数
2
解决办法
2914
查看次数

pyqt:在pyqt中将多个信号连接到同一个函数的正确方法(QSignalMapper不适用)

  1. 我已经准备了很多关于如何在 python 和 pyqt 中将多个信号连接到同一个事件处理程序的帖子。例如,将多个按钮或组合框连接到同一功能。

  2. 许多示例展示了如何使用 QSignalMapper 执行此操作,但是当信号携带参数时不适用,例如 combobox.currentIndexChanged

  3. 许多人建议它可以用 lambda 来制作。这是一个干净漂亮的解决方案,我同意,但没有人提到 lambda 创建了一个闭包,其中包含一个引用 - 因此无法删除被引用的对象。你好内存泄漏!

证明:

from PyQt4 import QtGui, QtCore

class Widget(QtGui.QWidget):
    def __init__(self):
        super(Widget, self).__init__()

        # create and set the layout
        lay_main = QtGui.QHBoxLayout()
        self.setLayout(lay_main)

        # create two comboboxes and connect them to a single handler with lambda

        combobox = QtGui.QComboBox()
        combobox.addItems('Nol Adyn Dwa Tri'.split())
        combobox.currentIndexChanged.connect(lambda ind: self.on_selected('1', ind))
        lay_main.addWidget(combobox)

        combobox = QtGui.QComboBox()
        combobox.addItems('Nol Adyn Dwa Tri'.split())
        combobox.currentIndexChanged.connect(lambda ind: self.on_selected('2', ind))
        lay_main.addWidget(combobox)

    # let the handler show …
Run Code Online (Sandbox Code Playgroud)

python garbage-collection pyqt signals-slots qsignalmapper

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

PyQt:重置或删除 QTreeWidgetItem 的背景颜色

如何删除 的背景颜色QTreeWidgetItem或将其重置为默认值?

treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green'))
Run Code Online (Sandbox Code Playgroud)

python background pyqt colors qtreewidgetitem

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

PyQt:QScrollArea 内小部件的环绕式布局

我正在开发一个使用 PyQt4 记忆文本的应用程序。我想在气泡中显示所有单词,以便您查看单词的长度。但是,当我的 中包含所有气泡时QScrollArea,它们将一个排列在另一个下方。我想让它们并排对齐,但使用自动换行。

我使用QLabel带有圆形边框的气泡来工作。但是现在我有了QLabel's.py 中的单词,PyQt 不再将它们视为单词,而是将它们视为小部件。所以 PyQt 把一个小部件放在另一个小部件下面。我希望小部件并排对齐,直到它们到达行尾,然后它们应该环绕到下一行 - 这意味着它们QLabel's应该像文本文档中的单词一样。

到目前为止,这是我的代码:

f = open(r'myFile.txt')

class Bubble(QtGui.QLabel):
    def __init__(self, text):
        super(Bubble, self).__init__(text)
        self.word = text
        self.setContentsMargins(5, 5, 5, 5)

    def paintEvent(self, e):
        p = QtGui.QPainter(self)
        p.setRenderHint(QtGui.QPainter.Antialiasing,True)
        p.drawRoundedRect(0,0,self.width()-1,self.height()-1,5,5)
        super(Bubble, self).paintEvent(e)


class MainWindow(QtGui.QMainWindow):
    def __init__(self, text, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.MainArea = QtGui.QScrollArea
        self.widget = QtGui.QWidget()
        vbox = QtGui.QVBoxLayout()
        self.words = []
        for t in re.findall(r'\b\w+\b', text):
            label = Bubble(t)
            label.setFont(QtGui.QFont('SblHebrew', 18))
            label.setFixedWidth(label.sizeHint().width())
            self.words.append(label) …
Run Code Online (Sandbox Code Playgroud)

python layout pyqt alignment qscrollarea

4
推荐指数
2
解决办法
3301
查看次数

连接到另一个小部件的事件

这很可能是一个重复的问题,但我不得不问它,因为其他答案对我来说没有帮助,因为我是 pyqt 的新手(几天前从 tkinter 转换而来)。

我想知道是否可以连接到这样的小部件事件:

 self.lineEdit = QtGui.QLineEdit(self.frame)

 self.lineEdit.keyReleaseEvent(lambda: someFunction(QtCore.Qt.Key_A ))

 self.lineEdit.setObjectName(_fromUtf8("lineEdit"))

 self.horizontalLayout.addWidget(self.lineEdit)
Run Code Online (Sandbox Code Playgroud)

进而...

def someFunction(event):
    print(event)
    ...
Run Code Online (Sandbox Code Playgroud)

我的问题是如何从另一个小部件绑定到特定事件,并将该事件与类似函数的btn.clicked.connect(function_goes_here).

在 tkinter 它是这样的:

self.Entry.bind("<KeyRelease-a>", lambda event: someFunction(event))
Run Code Online (Sandbox Code Playgroud)

python events pyqt python-3.x

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

如何在QPlainTextEdit中更改选项卡的宽度

在PyQt5中使用QPlaintextEdit时,如果按Tab键盘上的按钮,将得到一个等于六个空格大小的制表符空格。但我希望它是四个空格的大小,以便在使用时:

TextEdit.setPlainTextEdit('\t')
Run Code Online (Sandbox Code Playgroud)

我应该缩进制表符空格,该空格一共只要四个空格。

我尝试使用四个空格代替制表符空格,但是随着代码变得越来越冗长,事情变得复杂了。

indentation python-3.x qplaintextedit pyqt5

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

如何在dict中计算相同的值?

我有一个dict看起来像这样:

"votes": {
    "user1": "yes",
    "user2": "no",
    "user3": "yes",
    "user4": "no",
    "user5": "maybe",
    "user6": "yes"
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是,计算相同的值,以便我知道yes发生了3次,no发生了2次,maybe发生了1次.

我现在做的是:

votes = OrderedDict()
for key, value in vote_dict["votes"].items():
    if value in votes:
        votes[value] += 1
    else:
        votes[value] = 1
Run Code Online (Sandbox Code Playgroud)

它工作正常,但肯定有更好的方法来做到这一点.什么是更pythonic方式来做到这一点?

python counter dictionary

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