我正在使用pyside(qt)开发一个桌面应用程序,我想访问(迭代)QWidget的所有行编辑组件.在qt中我发现了两个方法findChild和findChildren,但没有找到正确的例子,我的代码显示错误,'form'对象没有属性'findChild'. 这里的'形式'是Qwidget表单,包括组件lineEdit,comboboxes,Qpushbuttons等.
码:
lineEdits = form.findChild<QLineEdit>() //This is not working
lineEdits = form.findChild('QLineEdit) //This also not working
Run Code Online (Sandbox Code Playgroud) 我有一个PySide应用程序,它有一个MainWindow(一个QMainWindow实例)的图标.当我正常运行文件时,图标是可见的,一切都很好但是当我创建一个exe时py2exe,图标不会出现.这种情况cx_freeze也会发生(所以我不认为这个问题py2exe).
该应用程序设计使用QtDesigner并转换为python与pyside-uic.我尝试使用图标作为文件和资源(qrc文件),两者似乎都不起作用.
任何帮助或指示将不胜感激.
谢谢.

我需要通过上面的小部件解决两个问题.
对于1,填充小部件的代码如下:
self._body_frame = QWidget()
self._body_frame.setMinimumWidth(750)
self._body_layout = QVBoxLayout()
self._body_layout.setSpacing(0)
self._post_widgets = []
for i in range(self._posts_per_page):
pw = PostWidget()
self._post_widgets.append(pw)
self._body_layout.addWidget(pw)
self._body_frame.setLayout(self._body_layout)
Run Code Online (Sandbox Code Playgroud)
SetSpacing(0)不会使事情更接近,但SetSpacing(100)确实增加了它.
编辑
(对于问题2)我没有提到这一点,但我希望父窗口小部件有一个垂直滚动条.
我已经回答了我自己的问题,但它的罗嗦,原因和影响都是基于的.一个恰当的精心编写的教程样式答案来解决这两点得到了赏金:D
编辑2
使用我自己的答案,我已经解决了这个问题.我现在会接受我自己的答案.

有几个网页说QTreeWidgetItem可以删除或删除QTreeWidget.clear.但我下面的代码示例似乎没有这样做.我做错了吗?
#!/usr/bin/python
import sys
from PySide.QtGui import QApplication, QWidget, QTreeWidget, QTreeWidgetItem
#from PyQt4.QtGui import QApplication, QWidget, QTreeWidget, QTreeWidgetItem # Result was the same with `PySide`
import time
class TreeWidgetItemChild(QTreeWidgetItem):
def __init__(self):
super(TreeWidgetItemChild, self).__init__()
print 'TreeWidgetItemChild init'
def __del__(self):
print 'TreeWidgetItemChild del'
def test_QTree_clear_children():
tree = QTreeWidget()
tree.setHeaderLabel('funksoul')
i = TreeWidgetItemChild()
tree.addTopLevelItem(i)
print 'Before clearing'
#tree.clear() # Didn't call destructor (__del__)
#tree.removeItemWidget (i, 0) # Didn't call destructor
#i.__del__() # Called destructor but it's called again afterward …Run Code Online (Sandbox Code Playgroud) QApplication()和QWidget()如何连接?
这是我复制的示例代码,它创建了QApplication对象和QWidget对象,但两个对象之间没有链接.我希望app.setWidget(did)教会PySide/PyQt控制器有关创建的小部件.
# http://zetcode.com/gui/pysidetutorial/firstprograms/
# 1. PySide.QtGui is the class
import sys
from PySide import QtGui
# 2. setup the application
app = QtGui.QApplication(sys.argv)
# 3. create the widget and setup
wid = QtGui.QWidget()
wid.resize(250, 150)
wid.setWindowTitle('Simple')
# 4. Show the widget
wid.show()
# 5. execute the app
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
这背后的魔力是什么?
与此完全相同的问题:连接QTableView selectionChanged信号会产生与PyQt的段错误
我有一个QListView,我想在选择一个项目时调用一个函数:
self.server_list = QtGui.QListView(self.main_widget)
self.server_list_model = QtGui.QStandardItemModel()
self.server_list.setModel(self.server_list_model)
self.server_list.selectionModel().selectionChanged.connect(self.server_changed)
Run Code Online (Sandbox Code Playgroud)
但是,当它到达最后一行时,我正在使用选择模型,应用程序崩溃了.没有回溯,但Windows中的"appname已停止工作".我很确定这是一个段错误.
但是,当我使用PyQt4时它工作正常.我正在使用PySide,因为它是LGPL.
是的,我正在使用最新版本的所有内容(PySide:1.2.1,Python 2.7.5,Qt 4.8.5).
谁能帮我这个?
我有一个窗口,其中包含QTableView哪些列调整为内容并固定宽度.所述QTableView嵌套内的QWidget,反过来嵌套内的QScrollArea是,在又一个嵌套内的选项卡式 QMdiArea这是centralWidget的QMainWindow.
当QScrollArea所示,QTableView有额外的空间,我想除去最后一列的权利:

我希望QTableView拟合列的确切宽度(即最右边的列后没有额外的空格).
我尝试使用tableView.setFixedWidth(desired_width)但是它唯一可行的方法是迭代所有列并获得它们的宽度并将它们加在一起并添加verticalHeader宽度和滚动条宽度并将其作为传递desired_width.
它确实以这种方式工作,但对于这样一个明显的要求似乎非常复杂:我认为许多程序开发人员希望他们的表的宽度适合列的宽度,这就是让我想知道可能有一种方法在没有额外计算的情况下自动完成并且我不知道.
所以我的问题是:有没有更简单的方法来实现相同的结果?
这是我的代码供参考:
t_main负责创建的模块的代码QMainWindow:
import sys
import t_wdw
from PySide import QtGui
class Main_Window(QtGui.QMainWindow):
def __init__(self):
super(Main_Window,self).__init__()
self.initUI()
def initUI(self):
self.statusBar()
# Defines QActions for menu
self.new_window=QtGui.QAction("&Window alpha",self)
self.new_window.triggered.connect(self.open_window)
# Creates the menu
self.menu_bar=self.menuBar()
self.menu1=self.menu_bar.addMenu('&Menu 1')
self.menu1.addAction(self.new_window)
# Creates a QMdiArea to …Run Code Online (Sandbox Code Playgroud) 当使用带有numpy和PySide导入的pytnon多处理池时,我的机器上发生了这种非常特殊的悬挂.这是我迄今为止在生活中看到的最纠结的错误:)以下代码:
import numpy as np
import PySide
def hang():
import multiprocessing
pool = multiprocessing.Pool(processes = 1)
pool.map(f, [None])
def f(ignore):
print('before dot..')
np.dot(np.zeros((128, 1)), np.zeros((1, 32)))
print('after dot.')
if __name__ == "__main__":
hang()
print('success!')
Run Code Online (Sandbox Code Playgroud)
仅在'点之前'挂起打印.但它应该打印
before dot..
after dot.
success!
Run Code Online (Sandbox Code Playgroud)
我不是gdb专家,但看起来像gdb显示进程在'np.dot'行退出(或崩溃):
[Inferior 1 (process 2884) exited normally]
Run Code Online (Sandbox Code Playgroud)
我可以采取一些神奇的修改来防止悬挂:
任何帮助表示赞赏!
包装版本:
numpy = 1.8.1或1.7.1 PySide = 1.2.1或1.2.2
Python版本:
在达尔文上的Python 2.7.5(默认,2013年9月12日,21:33:34)[GCC 4.2.1兼容的Apple LLVM 5.0(clang-500.0.68)]
要么
在达尔文上的Python 2.7.6(默认,2014年4月9日,11:48:52)[GCC 4.2.1兼容的Apple LLVM 5.1(clang-503.0.38)]
注意:在寻找信息时,我简化了原始代码并提出了一些问题.但是这里有一堆更新,以便为可能遇到此错误的其他人保留历史记录(例如,我开始使用matplotlib,而不是使用pyside)
更新:我缩小了pylab import以导入带有pyside后端的matplotlib并更新了要运行的代码.
更新:我正在修改帖子只导入PySide而不是:
import …Run Code Online (Sandbox Code Playgroud) 我有一个QListWidget在Python中使用PyQt显示名称列表.如何获得QListWidgetItem给定名称?
例如,如果我有以下QListWidget4项,我怎样才能得到包含text = dan的项目?

我一直在寻找一个工作示例,如何在pyside中嵌入matplotlib图,该图是使用QT设计器创建的,同时将逻辑保存在单独的文件中.我知道网上有很多例子,但它们都没有实际使用QT设计器,然后创建一个单独的文件来添加matplitlib图添加到窗口小部件的逻辑.我找到了一个'几乎'的例子http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/,但是在我的版本中,"改变layoutName"是不可能的.属性从"verticalLayout"到"mplvl"".
所以我有以下具体问题:我不清楚Pyside Qt设计师可以嵌入哪个项目.它是一个简单的"小部件"(因为pyside中没有matplotlib小部件可用).如果是这样,我怎么才能将情节添加到该小部件?或者我是否必须使用Qt Designer创建"FigureCanvas"?这有可能吗?如果是这样,怎么样?
这是Pyside Qt设计师在嵌入小部件时可以做的最简单的设计(这是正确的吗?).我现在如何在它上面添加一个matplotlib图?
正如我在其中一个答案中所建议的,我现在将Qwidget提升为MyStaticMplCanvas,并将Qwidget的名称编辑为mplvl.
使用Pyside Qt设计器自动生成的文件,并使用pyside-uic ui.ui -o ui.py -x编译
ui.py看起来像这样:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui.ui'
#
# Created: Wed Apr 20 14:00:02 2016
# by: pyside-uic 0.2.15 running on PySide 1.2.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(444, 530)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.mplvl = MyStaticMplCanvas(self.centralwidget)
self.mplvl.setGeometry(QtCore.QRect(120, 190, …Run Code Online (Sandbox Code Playgroud) pyside ×10
python ×9
qt ×7
pyqt ×4
pyqt4 ×2
children ×1
crash ×1
matplotlib ×1
numpy ×1
py2exe ×1
qt4 ×1
qtableview ×1
qtreewidget ×1