小编ekh*_*oro的帖子

在 Python (PyQt) 中创建 QR 码

我目前正在使用 PyQt4 和qrcode4.0.4

from PyQt4 import QtGui, QtCore
from PIL.ImageQt import ImageQt
import qrcode

class QRLabel(QtGui.QLabel):
    def __init__(self, text=""):
        super(QRLabel, self).__init__()
        self.setCode(text)

    def setCode(self, text=""):        
        self.text = text      
        qrImg = qrcode.make(text)
        imgQt = ImageQt(qrImg.convert("RGB"))   # keep a reference!
        pixm = QtGui.QPixmap.fromImage(imgQt)
        self.setPixmap(pixm.scaled(self.size(),QtCore.Qt.KeepAspectRatio))
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在屏幕上显示图像之前需要克服几个障碍。QR 代码以 RGBA PIL 图像开始,转换为 RGB,然后转换为 PIL ImageQt 对象,然后转换为 QPixmap,然后将其放置在具有缩放修复的 QLabel 上。

如果您没有显式存储 imgQt 引用,则在加载小部件时会得到垃圾。

我的问题:我可以做些什么来改善这一点,因为似乎涉及很多转换。

python qr-code pyqt qpixmap python-imaging-library

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

如何在不使用类的情况下自动调整QLabel pixmap保持率?

我们正在使用PyQt和Qt Designer制作GUI.现在我们需要放置在QLabel中的图像(像素图)在调整窗口大小时很好地保持比例.

我一直在阅读其他问题/答案,但他们都使用扩展课程.由于我们在UI中不断进行更改,并且使用Qt Creator创建,因此会自动生成.ui和(相应的).py文件,因此,如果我没有错,使用类解决方案不是一个好的选择.我们因为每次更新ui时都应该手动更改类的名称.

是否有任何选项可以自动调整QLAbel中的像素图,保持比率并避免使用扩展的clases?

谢谢.

python resize pyqt qt-designer qlabel

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

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
查看次数

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
查看次数

自定义Qt设计器小部件的代码?

我需要向使用 Qt Designer 创建的表单中的图形小部件添加一些功能。

例如我通常会这样做:

class custom_gv(QGraphicsView):
    def __init__(self):
        super().__init__()

    def zoom(self):
        # custom code here
Run Code Online (Sandbox Code Playgroud)

但在本例中,图形视图是我在 Qt Designer 中创建的窗口的一部分。我知道您可以在 Qt 设计器中使用“升级到”功能,但我不知道如何在代码中使用该功能,特别是考虑到我使用此方法来使用 Qt 设计器窗口:

from PyQt5.uic import loadUiType

custom_window = loadUiType('ui.ui')

class Window(QMainWindow, custom_window):
    def __init__(self):
        QMainWindow.__init__(self)
        custom_window.__init__(self)
        self.setupUi(self)
Run Code Online (Sandbox Code Playgroud)

那么,当我使用 Qt Designer 时,我该如何自定义窗口中图形视图的代码呢?

python pyqt qt-designer pyqt5 uic

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

如何在 QLineEdit 中隐藏密码

想要隐藏“*”键入的密码。但是密码显示为原始文本...

class Form(QDialog):
    def __init__(self, parent = None):
        super(Form,self).__init__(parent)

        self.usernamelabel = QLabel("Username : ")
        self.passwordlabel = QLabel("Password : ")
        self.username = QLineEdit()
        self.password = QLineEdit()
        self.okbutton = QPushButton("Login")
        self.username.setPlaceholderText("Enter Username Here")
        self.password.setPlaceholderText("Enter Password Here")

        layout = QGridLayout()
        layout.addWidget(self.usernamelabel,0,0)
        layout.addWidget(self.passwordlabel,1,0)
        layout.addWidget(self.username,0,1)
        layout.addWidget(self.password,1,1)
        layout.addWidget(self.okbutton)
        self.setLayout(layout)
Run Code Online (Sandbox Code Playgroud)

passwords pyside qlineedit python-2.7

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

如何在代理模型处理的模型中为多个列设置项目委托?

我设置我的项目委托如下:

COMBOBOX_ITEMS_FRUITS = ['Apple', 'Banana']
COMBOBOX_ITEMS_COLORS = ['Red', 'Green', 'Blue']

self.treeview.setItemDelegateForColumn(COLUMN_A, ComboBoxDelegate(COMBOBOX_ITEMS_FRUITS))
self.treeview.setItemDelegateForColumn(COLUMN_B, ComboBoxDelegate(COMBOBOX_ITEMS_COLORS))
Run Code Online (Sandbox Code Playgroud)

将模型设置为代理模型的源模型后,我的应用程序崩溃但没有抛出任何错误:

self.model_source = treeview_model
self.sf_proxy_model.setSourceModel(self.model_source)
Run Code Online (Sandbox Code Playgroud)

setItemDelegateForColumn当使用sortfilterproxymodel处理源模型时,我似乎只能使用一个.

ComboBoxDelegate 定义如下:

class ComboBoxDelegate(QStyledItemDelegate):
    def __init__(self, items):
        super(ComboBoxDelegate, self).__init__()

        self.items = items

    def createEditor(self, parent, option, index):
        editor = QComboBox(parent)
        editor.setAutoFillBackground(True)

        for item in self.items:
            editor.addItem(item)

        return editor

    def setEditorData(self, editor, index):
        current_index = editor.findText(index.model().data(index), Qt.MatchExactly)
        editor.setCurrentIndex(current_index)

    def setModelData(self, editor, model, index):
        item_index = model.mapToSource(index)
        item = model.sourceModel().item(item_index.row(), 0)

        if index.parent().row() == -1 and item.hasChildren():
            for row in range(item.rowCount()): …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtreeview qstyleditemdelegate pyqt5

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

如何使用AND运算符过滤包含特定字符串值的行

我的问题是在这个链接中回答得很好的问题的扩展:

我在下面发布了答案,当字符串包含单词"ball"时,字符串被过滤掉:

In [3]: df[df['ids'].str.contains("ball")]
Out[3]:
     ids     vals
0  aball     1
1  bball     2
3  fball     4
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如果我的数据中有长句,我想识别带有"ball"和"field"字样的字符串怎么办?因此当它们中只有一个出现时,它会丢弃包含单词"ball"或"field"的数据,但保留字符串中包含两个单词的数据.

python filtering pandas

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

如何调整 QVBoxLayout 中布局之间的空间

我已经了解了如何调整布局中小部件之间的空间: Space Between widgets in QVBoxLayout。但是,我想知道如何调整添加到布局的布局之间的空间。

例如:

layout = QVBoxLayout()
h1_layout = QHBoxLayout()
h2_layout = QHBoxLayout()
layout.addLayout(h1_layout)
layout.addLayout(h2_layout)
Run Code Online (Sandbox Code Playgroud)

我希望h1_layout和的内容h2_layout彼此靠近放置,而不是在垂直布局上间隔开。

python layout pyqt spacing qvboxlayout

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