我目前正在使用 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 引用,则在加载小部件时会得到垃圾。
我的问题:我可以做些什么来改善这一点,因为似乎涉及很多转换。
我们正在使用PyQt和Qt Designer制作GUI.现在我们需要放置在QLabel中的图像(像素图)在调整窗口大小时很好地保持比例.
我一直在阅读其他问题/答案,但他们都使用扩展课程.由于我们在UI中不断进行更改,并且使用Qt Creator创建,因此会自动生成.ui和(相应的).py文件,因此,如果我没有错,使用类解决方案不是一个好的选择.我们因为每次更新ui时都应该手动更改类的名称.
是否有任何选项可以自动调整QLAbel中的像素图,保持比率并避免使用扩展的clases?
谢谢.
当我运行以下函数时,对话框显示所有内容。问题是按钮无法连接。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() 这样的插槽。
问题:
当在 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 上提供的 …
我正在开发一个使用 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) 我需要向使用 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 时,我该如何自定义窗口中图形视图的代码呢?
想要隐藏“*”键入的密码。但是密码显示为原始文本...
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) 我设置我的项目委托如下:
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) 我的问题是在这个链接中回答得很好的问题的扩展:
我在下面发布了答案,当字符串包含单词"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"的数据,但保留字符串中包含两个单词的数据.
我已经了解了如何调整布局中小部件之间的空间: 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彼此靠近放置,而不是在垂直布局上间隔开。