当我运行以下函数时,对话框显示所有内容。问题是按钮无法连接。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 上提供的 …
现在我像这样加载它们:
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)
但我认为这很不舒服,有没有其他方法,可能加载整个命名空间或其他什么?
我正在使用自定义QSortFilterProxyModel来QTableView通过覆盖来实现自定义过滤filterAcceptsRow().如何在更改过滤条件时通知我的应用程序,并将filterAcceptsRow()其应用于整个表格后?
基本上,我希望在应用过滤后获得可见项目的列表,目前我通过我在模型中实现的自定义函数计算此列表,该函数迭代行并获得可见行列表.这是低效的,因为如果在它们之间没有发生过滤动作,则对该函数的两次调用将产生相同的结果.
我已经准备了很多关于如何在 python 和 pyqt 中将多个信号连接到同一个事件处理程序的帖子。例如,将多个按钮或组合框连接到同一功能。
许多示例展示了如何使用 QSignalMapper 执行此操作,但是当信号携带参数时不适用,例如 combobox.currentIndexChanged
许多人建议它可以用 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) 如何删除 的背景颜色QTreeWidgetItem或将其重置为默认值?
treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green'))
Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用 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) 这很可能是一个重复的问题,但我不得不问它,因为其他答案对我来说没有帮助,因为我是 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) 在PyQt5中使用QPlaintextEdit时,如果按Tab键盘上的按钮,将得到一个等于六个空格大小的制表符空格。但我希望它是四个空格的大小,以便在使用时:
TextEdit.setPlainTextEdit('\t')
Run Code Online (Sandbox Code Playgroud)
我应该缩进制表符空格,该空格一共只要四个空格。
我尝试使用四个空格代替制表符空格,但是随着代码变得越来越冗长,事情变得复杂了。
我有一个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 ×7
pyqt ×5
python-3.x ×3
pyside ×2
qt ×2
qt-designer ×2
alignment ×1
background ×1
c++ ×1
colors ×1
counter ×1
dictionary ×1
events ×1
indentation ×1
layout ×1
pyqt5 ×1
qdialog ×1
qscrollarea ×1
qtableview ×1
qtreeview ×1
uic ×1