我正在尝试使用PyInstaller 1.5编译PyQt程序.当我使用--onedir(默认值)时,以下两个程序都可以正常工作,但这会创建相当大的程序.我想使用--onefile选项,但是当我运行创建的onefile应用程序时,我收到错误:
Traceback (most recent call last):
File "<string>", line 11, in <module>
File "pyinstaller/PyInstaller/loader/iu.py", line 468, in importHook
raise ImportError("No module named %s" % fqname)
ImportError: No module named PyQt4.QtCore
Run Code Online (Sandbox Code Playgroud)
这两个都发生此错误:
import sys
from PyQt4 import QtCore, QtGui
app =QtGui.QApplication(sys.argv)
window =QtGui.QMainWindow()
window.setCentralWidget(QtGui.QLabel("Hello"))
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
还有这个:
import sys
import PyQt4.QtCore, PyQt4.QtGui
app = PyQt4.QtGui.QApplication(sys.argv)
window = PyQt4.QtGui.QMainWindow()
window.setCentralWidget(PyQt4.QtGui.QLabel("Hello"))
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法?
我在python中编写了一个自定义骰子滚动解析器(如果必须,可以使用snicker).基本上,我想使用标准数学评估,但添加'd'运算符:
#xdy
sum = 0
for each in range(x):
sum += randInt(1, y)
return sum
Run Code Online (Sandbox Code Playgroud)
所以,例如,1d6 + 2d6 + 2d6-72 + 4d100 =(5)+(1 + 1)+(6 + 2)-72+(5 + 39 + 38 + 59)= 84
我正在使用正则表达式来替换所有'和s,然后使用eval,但我的正则表达式在处理任何一方的括号时都崩溃了.有没有比实现我自己的递归解析更快的方法呢?也许在eval中添加运算符?
编辑:我似乎给出了一个不好的例子,因为上面的例子适用于我当前的版本.我正在寻找的是评估(5+(6d6))d(7-2*(1d4))的一些方法.
通过"分崩离析",我只是意味着我当前的正则表达式失败了.我对自己的失败过于模糊,对此感到抱歉.这是我目前的代码:
def evalDice(roll_matchgroup):
roll_split = roll_matchgroup.group('roll').split('d')
print roll_split
roll_list = []
for die in range(int(roll_split[0])):
roll = random.randint(1,int(roll_split[1]))
roll_list.append(roll)
def EvalRoll(roll):
if not roll: return 0
rollPattern = re.compile('(?P<roll>\d*d\d+)')
roll_string = rollPattern.sub(evalDice, roll.lower())
Run Code Online (Sandbox Code Playgroud)
为此,"1d6 + 4d100"工作正常,但"(1d6 + 4)d100"或甚至"1d6 + 4d(100)"失败.
我使用 QTest 和 unittest 在 PyQt 中编写了一系列单元测试。我的代码传递信号,因此为了确保在测试之前操作后经过了足够的时间,我添加了一些 qWaits。
APP.ui.serverPortEdit.setText('1234')
QTest.mouseClick(APP.ui.userConnectButton, Qt.LeftButton)
QTest.qWait(2000) #wait for the server to connect
self.checkOnline()
Run Code Online (Sandbox Code Playgroud)
我想在 PySide 中运行相同的测试,但我找不到 qWait 的类似物。我是不是忽略了什么?PySide qTest 文档没有提及它。
我已经编写了多列QTreeView的后代。我想创建一个弹出菜单,当用户右键单击列标题时出现。我已经尝试从QTreeView捕获信号,但是QTreeView似乎没有在标头上发出信号。QTreeView.header()可以。因此,我相信我必须执行以下任一操作:
1:将QHeaderView的信号之一连接到弹出功能-我一直无法找到单击一次右键即可触发的信号-我尝试了sectionClicked,sectionHandleDoubleClicked,sectionDoubleClicked,sectionPressed(双击功能未捕获到单个右键单击,但确实捕获了双击右键)
self.header().sectionClicked.connect(self.headerMenu)
self.header().sectionHandleDoubleClicked.connect(self.headerMenu)
self.header().sectionDoubleClicked.connect(self.headerMenu)
self.header().sectionPressed.connect(self.headerMenu)
Run Code Online (Sandbox Code Playgroud)
或者,
2:使用我自己的MousePressEvent函数编写QHeaderView的后代,并将其用作我的标题。到目前为止,在将新的标头类连接到QTreeView后代方面,我一直没有成功。我在运行时不断遇到Segmentation Fault,没有更多解释。
#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我在pyqt应用程序中有一个QTreeView的自定义子类.我试图让用户能够突出显示和"低亮"(缺少一个更好的术语)行.突出显示的行应具有粗体文本和(可选)不同的背景颜色.有任何想法吗?
我正在考虑将StyleSheets作为一种选择,但到目前为止还无法让它发挥作用.如果我设置QTreeView的样式表:
self.setStyleSheet("QTreeView::item:selected {border: 1px solid #567dbc;}")
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何手动启用"状态",只保留特定状态下的所需行.如果我尝试设置单个项目的样式表:
#modelIndex is a valid QModelIndex
modelIndex.internalPointer().setStyleSheet()
Run Code Online (Sandbox Code Playgroud)
我得到了一个段错误.
我不相信样式表是可行的方式,我对所有想法持开放态度.谢谢!
pyqt ×4
python ×3
qt ×2
qtreeview ×2
eval ×1
math ×1
pyinstaller ×1
pyside ×1
qheaderview ×1
qtestlib ×1
stylesheet ×1