我是python的新手,我正在使用Python + PySide评估开发桌面程序,并发现cx_freeze在将我的python代码转换为可执行文件方面非常有效,而且它是跨平台的.
我的问题是,有人可以将cx_freeze生成的EXE反编译回完全可读的代码,就好像我的原始源代码一样吗?
注意:我并不担心有人破解我的程序,但只是不希望别人可以接受我的代码并开发基础.
谢谢.
我试图在我的PySide应用程序中调试一些神秘的崩溃.我目前在Windows上使用Python 2.7,并希望构建Python和PySide的调试版本以帮助调试.我按照这里的说明使用MSVC 2013构建Python的调试版本.构建大部分工作,一些我不关心无法编译的库.
我使用上面链接中的相同说明将相关文件复制到c:\ python27_d,并为其设置虚拟环境.但是,当我尝试easy_install或pip安装库,如paramiko或pycrypto时,我会收到链接错误:
winrand.obj : error LNK2019: unresolved external symbol __imp__Py_InitModule4 referenced in function _initwinr
andom
build\lib.win32-2.7-pydebug\Crypto\Random\OSRNG\winrandom.pyd : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)
通常,如何为Python的调试版本安装库或模块?我为提出如此广泛的问题而道歉,但我不熟悉Python如何知道在哪里找到未解决的链接的内部.
我问这个的原因是因为我看过这个页面,但是我找不到从下载页面下载的Mac OSX二进制文件.有一个特殊的地方可以得到它们.
我想开发一个UI,其中包含用户配置应用程序的两种形式,以及一个"渲染"部分,例如,它将打印一些精灵.
是否可以在同一个应用程序中组合PySide和PyGame?例如,我如何获得包含Pygame应用程序的PySide Frame?
谢谢
[编辑]这不是PySide发出信号的纯副本导致python崩溃的问题.这个问题特别涉及PySide中的一个(现在)已知错误,它阻止了无法跨线程传递.另一个问题涉及将信号连接到微调框.我更新了这个问题的标题,以更好地反映我面临的问题.[/编辑]
我对PySide与PyQt略有不同的情况感到震惊.好吧,我巧妙地说,但实际上PySide 崩溃了 Python,而PyQt正如我所期望的那样工作.

我是PySide的新手,对PyQt来说还是比较新的,所以也许我犯了一些基本的错误,但是如果我能搞清楚的话该死的...真的希望你们中的一个好人能给出一些指示!
完整的应用程序是一个批处理工具,在这里描述太麻烦了,但我已经将问题解决了以下代码示例中的基本要点:
import threading
try:
# raise ImportError() # Uncomment this line to show PyQt works correctly
from PySide import QtCore, QtGui
except ImportError:
from PyQt4 import QtCore, QtGui
QtCore.Signal = QtCore.pyqtSignal
QtCore.Slot = QtCore.pyqtSlot
class _ThreadsafeCallbackHelper(QtCore.QObject):
finished = QtCore.Signal(object)
def Dummy():
print "Ran Dummy"
# return '' # Uncomment this to show PySide *not* crashing
return None
class BatchProcessingWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self, None)
btn = …Run Code Online (Sandbox Code Playgroud) 文档(至少在PyQt中)QWebView说:'QWebView类提供了一个用于查看和编辑Web文档的小部件',而是QWebPage说:'QWebPage类提供了一个查看和编辑Web文档的对象'.鉴于这些有效地意味着同样的事情:
(这源于我使用嵌入在PyQt应用程序中的javascript库的事实;我目前正在使用QWebView,但只有QWebPage一种捕获javascript错误的方法,所以考虑是否值得将我的代码转换为子类QwebPage)
我正在尝试使用PySide创建一些自定义小部件,这将扩展现有的小部件.是否可以从PySide访问存储在"d指针"中的数据.例如,我想继承QLabel.我需要编写一个新的paintEvent函数,但是,我需要复制一些使用来自"d指针"的数据的paintEvent代码,例如d-> control-> document(),据我所知,QLabel没有成员函数来检索它.这可能是纯粹用Python做的,还是我必须创建一个c ++子类并为它创建新的Python绑定?
编辑以响应@ f.rodrigues的评论(因为我的回复太长而无法发表评论)
我需要做的主要事情是创建一个垂直标签,文本旋转90度.StackOverflow(以及Web的其余部分)有很多关于如何通过继承QLabel并覆盖paintEvent函数来创建它的示例.这里的问题是现在调用我的新类的paintEvent,而不是QLabel绘制事件.因此,我想在子类中拥有的QLabel.paintEvent中的任何功能都必须在子类中重写.如果你看一下QLabel :: paintEvent的源代码,可以采用一些不使用d指针就不可能的代码路径.如果我正在编写一个c ++程序,答案就是简单地使用子类'paintEvent中的d指针.
为了我的迫切需要,我能够在不使用d指针的情况下得到我需要的东西.我想知道我的问题的答案,以防我需要修改我的VerticalLabel类或需要子类化不同的Qt类.
我想更新小部件的值,但为了防止无限循环,我需要阻止调用此小部件.valueChanged信号的回调函数.
以下示例完全按预期工作:
Qt = PySide
class MainWindow(Actor, Qt.QtGui.QMainWindow):
def __init__(self):
Qt.QtGui.QMainWindow.__init__(self)
Actor.__init__(self)
self.ui = Qt.loadUI('simulator.ui')
self.ui.horizontalSlider.valueChanged.connect(self.emit_weight_msg)
def emit_weight_msg(self, value):
self.send({'WeightMessage': {'val': value}})
def handle_WeightMessage(self, msg):
self.ui.horizontalSlider.valueChanged.disconnect(self.emit_weight_msg)
self.ui.horizontalSlider.setValue(msg["val"])
self.ui.horizontalSlider.valueChanged.connect(self.emit_weight_msg)
Run Code Online (Sandbox Code Playgroud)
由于断开和连接valueChanged信号似乎有点像黑客,我想问是否存在更优雅的解决方案.
完整代码在这里:https://github.com/ceremcem/weighing-machine-testing
我正在寻找一种方法,比如:
def setValueSilent(QtObject, value):
tmp_callback = QtObject.get_callback_functions_that_are_set_in_python_code()
QtObject.valueChanged.disconnect(tmp_callback)
QtObject.setValue(value)
QtObject.valueChanged.connect(tmp_callback)
Run Code Online (Sandbox Code Playgroud) 我有一个可向其中动态添加QTableWidgets的滚动视图。但是,QTables本身也具有滚动条,因此不会显示完整表。有没有一种方法可以禁用滚动条,以便始终显示完整的表格?
编辑:我添加了
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
Run Code Online (Sandbox Code Playgroud)
按照建议。滚动条确实消失了,但是它仍然只显示部分表格(Ican可以在表格上悬停并使用鼠标滚轮进行滚动)。窗口小部件的代码如下
from PySide.QtGui import *
from PySide.QtCore import *
class MdTable(QTableWidget):
def __init__(self, data, depth, *args):
QTableWidget.__init__(self, *args)
self.hheaders = ["c1", "c2", "c3", "c4"]
self.depth = depth
self.bids = data
self.setData()
def setData(self):
self.setRowCount(self.depth)
self.setColumnCount(5)
for i in xrange(self.depth):
if len(self.data) > i:
d1= QTableWidgetItem(str(self.data[i][0]))
d2= QTableWidgetItem(str(self.data[i][1]))
self.setItem(i, 1, d1)
self.setItem(i, 2, d2)
self.setHorizontalHeaderLabels(self.hheaders)
self.verticalHeader().setVisible(False)
self.resizeRowsToContents()
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
Run Code Online (Sandbox Code Playgroud) 最近我买了一台全新的 Raspberry Pi 4B,内存为 8Gb,并安装了 Ubuntu Desktop 21.04。
我的目标是在触摸屏上创建一个 GUI,用于控制 GPIO 引脚(某些硬件设备)。
由于控制 GPIO 是由 Python 完成的,所以我也想用它来编写 GUI。我看了几个教程,决定使用 PySide6 + Qt Quick。这种程序在我的个人笔记本电脑上运行良好,但当尝试下载 Raspberry 上所需的依赖项时,例如:
python3.9 -m pip install PySide6
我收到以下错误:
ERROR: Could not find a version that satisfies the requirement PySide6 (from versions: none)
ERROR: No matching distribution found for PySide6
Run Code Online (Sandbox Code Playgroud)
我认为这个问题可能是由交叉编译引起的。
您知道是否有机会在 Raspberry Pi 4B 上运行 PySide6 和 QtQuick?
更新:
在采用 Manjaro ARM KDE Plasma 21.07 64 位操作系统的 Raspberry Pi 4B 上进行测试
运行以下命令:
* Update the package database …Run Code Online (Sandbox Code Playgroud) pyside ×10
python ×7
pyqt ×3
qt ×3
crash ×1
cx-freeze ×1
decompiling ×1
pip ×1
pycrypto ×1
pygame ×1
pyside6 ×1
python-3.x ×1
qt-quick ×1
qtablewidget ×1
qwebpage ×1
qwebview ×1
raspberry-pi ×1