找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4077|回复: 1

[已回复] 用py2exe打包PyQt5+Matplotlib出错

1

主题

1

帖子

1

积分

贫民

积分
1
wzy1986 发表于 2016-8-26 22:59:49 | 显示全部楼层 |阅读模式
打包Python3.4+PyQt5+Matplotlib程序,使用的py2exe打包,打包生成exe文件,运行出错,生成mymain1.log文件。
错误信息
  1. Traceback (most recent call last):
  2.   File "mymain1.py", line 9, in <module>
  3.   File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  4.   File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  5.   File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
  6.   File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
  7.   File "C:\Python34\lib\site-packages\zipextimporter.py", line 86, in load_module
  8.     return zipimport.zipimporter.load_module(self, fullname)
  9.   File "C:\Python34\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 30, in <module>
  10.     _decref = ctypes.pythonapi.Py_DecRef
  11.   File "C:\Python34\lib\ctypes\__init__.py", line 364, in __getattr__
  12.     func = self.__getitem__(name)
  13.   File "C:\Python34\lib\ctypes\__init__.py", line 369, in __getitem__
  14.     func = self._FuncPtr((name_or_ordinal, self))
  15. AttributeError: function 'Py_DecRef' not found
复制代码
打包setup.py文件

代码如下
  1. from distutils.core import setup
  2. import py2exe
  3. import sys

  4. # this allows to run it with a simple double click.
  5. sys.argv.append('py2exe')

  6. py2exe_options = {
  7.     "includes": ["sip"],  # 如果打包文件中有PyQt代码,则这句为必须添加的
  8.     "dll_excludes": ["MSVCP90.dll", ],  # 这句必须有,不然打包后的程序运行时会报找不到MSVCP90.dll,如果打包过程中找不到这个文件,请安装相应的库
  9.     "compressed": 1,
  10.     "optimize": 2,
  11.     "ascii": 0,
  12.     "bundle_files": 1,  # 关于这个参数请看第三部分中的问题(2)
  13. }

  14. setup(
  15.     name='PyQt Demo',
  16.     version='1.0',
  17.     windows=['mymain1.py', ],  # 括号中更改为你要打包的代码文件名
  18.     data_files=[("",
  19.                  [r"C:\Python34\Lib\site-packages\PyQt5\libEGL.dll"]),
  20.                 ("platforms",
  21.                  [r"C:\Python34\Lib\site-packages\PyQt5\plugins\platforms\qwindows.dll"])],
  22.     zipfile=None,
  23.     options={'py2exe': py2exe_options}
  24. )
复制代码
用这个文件打包只有Python3.4+PyQt5的程序,没有问题
看错误信息  在ctypes库里没找到Py_DecRef这个函数

以下是要打包的代码
  1. # -*- coding: utf-8 -*-

  2. import sys
  3. import time
  4. import minimalmodbus
  5. from PyQt5 import QtCore, QtWidgets, QtGui
  6. import matplotlib
  7. matplotlib.use("Qt5Agg")
  8. from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
  9. from matplotlib.figure import Figure
  10. from numpy import arange, sin, pi

  11. class MyMplCanvas(FigureCanvas):
  12.     """这是一个窗口部件,即QWidget(当然也是FigureCanvasAgg)"""
  13.     def __init__(self, parent=None, width=5, height=4, dpi=100):
  14.         fig = Figure(figsize=(width, height), dpi=dpi)
  15.         self.axes1 = fig.add_axes([0.15, 0.55, 0.8, 0.4])
  16.         self.axes2 = fig.add_axes([0.15, 0.1, 0.8, 0.4])

  17.         # 每次plot()调用的时候,我们希望原来的坐标轴被清除(所以False)
  18.         self.axes1.hold(False)
  19.         self.axes2.hold(False)

  20.         self.compute_initial_figure()

  21.         #
  22.         #super(MyMplCanvas, self).__init__(self, fig)
  23.         FigureCanvas.__init__(self, fig)
  24.         self.setParent(parent)

  25.         FigureCanvas.setSizePolicy(self,
  26.                                    QtWidgets.QSizePolicy.Expanding,
  27.                                    QtWidgets.QSizePolicy.Expanding)
  28.         FigureCanvas.updateGeometry(self)

  29.     def compute_initial_figure(self):
  30.         pass
  31. class MyStaticMplCanvas(MyMplCanvas):
  32.     """静态画布:一条正弦线"""
  33.     def compute_initial_figure(self):
  34.         t = arange(0.0, 3.0, 0.01)
  35.         s = sin(2*pi*t)
  36.         self.axes1.plot(t, s)
  37. class MyDynamicMplCanvas(MyMplCanvas):
  38.     """动态画布:每秒自动更新,更换一条折线。"""
  39.     x = []
  40.     y1 = []
  41.     y2 = []
  42.     def __init__(self, *args, **kwargs):
  43.         MyMplCanvas.__init__(self, *args, **kwargs)
  44.         timer = QtCore.QTimer(self)
  45.         timer.timeout.connect(self.update_figure)
  46.         timer.start(1000)

  47.     def compute_initial_figure(self):
  48.         if len(self.x) == len(self.y1) and len(self.x) == len(self.y2):
  49.             self.axes1.plot(self.x, self.y1,  color="red", linewidth=2)
  50.             self.axes2.plot(self.x, self.y2, "b--", label=r"瞬时流量")
  51.             self.axes2.set_xlabel("time")
  52.             self.axes1.set_ylabel("Volt")
  53.             self.axes1.set_title("PyPlot First Example")
  54.             self.axes1.set_xticks([])
  55.             #self.axes1.set_ylim(-1.2, 1.2)
  56.             #self.axes1.legend()

  57.     def update_figure(self):

  58.         if len(self.x) == len(self.y1) and len(self.x) == len(self.y2):
  59.             self.axes1.plot(self.x,self.y1,label=r"Instantaneous flow rate",color="red",linewidth=2)
  60.             self.axes2.plot(self.x,self.y2, "b--", label=r"Cumulative flow")
  61.             self.axes2.set_xlabel("time")
  62.             self.axes1.set_ylabel("Instantaneous flow rate")
  63.             self.axes2.set_ylabel("Cumulative flow")
  64.             self.axes1.set_title("Record of Flow rate")
  65.             self.axes1.set_xticks([])
  66.             #self.axes1.set_ylim(-1.2, 1.2)
  67.             #self.axes1.legend()
  68.         self.draw()
  69. class Myalert(QtWidgets.QWidget):
  70.     def __init__(self):
  71.         super(Myalert,self).__init__()

  72. class errorDialog(QtWidgets.QDialog):
  73.     def __init__(self):
  74.         super(errorDialog, self).__init__()
  75.         self.resize(451, 250)
  76.         self.setSizeGripEnabled(True)
  77.         self.setModal(True)
  78.         icon = QtGui.QIcon()
  79.         icon.addPixmap(QtGui.QPixmap("cross-octagon.png"),
  80.                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
  81.         self.setWindowIcon(icon)
  82.         #以下三句设置网格放置Widget 位于底部
  83.         self.layoutWidget = QtWidgets.QWidget(self)
  84.         self.layoutWidget.setGeometry(QtCore.QRect(20, 190, 411, 33))
  85.         self.layoutWidget.setObjectName("layoutWidget")
  86.         #以下四句设置底部水平网格HBoxLayout
  87.         self.hboxlayout = QtWidgets.QHBoxLayout(self.layoutWidget)
  88.         self.hboxlayout.setContentsMargins(0, 0, 0, 0)
  89.         self.hboxlayout.setSpacing(6)
  90.         self.hboxlayout.setObjectName("hboxlayout")
  91.         #以下两句设置okButton前的空格
  92.         spacerItem = QtWidgets.QSpacerItem(71, 30,
  93.                                            QtWidgets.QSizePolicy.Expanding,
  94.                                            QtWidgets.QSizePolicy.Minimum)
  95.         self.hboxlayout.addItem(spacerItem)
  96.         #以下三句设置okButton
  97.         self.okButton = QtWidgets.QPushButton(self.layoutWidget)
  98.         self.okButton.setObjectName("okButton")
  99.         self.hboxlayout.addWidget(self.okButton)
  100.         # 以下三句设置cancelButton
  101.         self.cancelButton = QtWidgets.QPushButton(self.layoutWidget)
  102.         self.cancelButton.setObjectName("cancelButton")
  103.         self.hboxlayout.addWidget(self.cancelButton)
  104.         # 以下两句设置cancelButton后的空格
  105.         spacerItem1 = QtWidgets.QSpacerItem(40, 20,
  106.                                             QtWidgets.QSizePolicy.Expanding,
  107.                                             QtWidgets.QSizePolicy.Minimum)
  108.         self.hboxlayout.addItem(spacerItem1)
  109.         # 以下三句设置groupBox,用于放置绘制的TEXT
  110.         self.groupBox = QtWidgets.QGroupBox(self)
  111.         self.groupBox.setGeometry(QtCore.QRect(20, 10, 410, 170))
  112.         self.groupBox.setTitle("")
  113.         self.groupBox.setObjectName("groupBox")
  114.         # 以下三句设置groupBox,用于放置绘制的TEXT
  115.         self.label = QtWidgets.QLabel(self.groupBox)
  116.         self.setlabel(self.label)
  117.         self.label.setGeometry(QtCore.QRect(230, 10, 171, 131))
  118.         self.label.setObjectName("label")
  119.         self.label_2 = QtWidgets.QLabel(self.groupBox)
  120.         self.setlabel(self.label_2)
  121.         self.label_2.setGeometry(QtCore.QRect(10, 10, 221, 41))
  122.         self.label_2.setObjectName("label_2")
  123.         self.label_3 = QtWidgets.QLabel(self.groupBox)
  124.         self.label_3.setGeometry(QtCore.QRect(50, 50, 131, 111))
  125.         self.label_3.setText("")
  126.         self.label_3.setPixmap(QtGui.QPixmap("error"))
  127.         self.label_3.setObjectName("label_3")
  128.         # 下面一句调用retranslateUi()设置部件的文字
  129.         self.retranslateUi(self)
  130.         # 以下三句设置事件触发
  131.         self.okButton.clicked.connect(self.accept)
  132.         self.cancelButton.clicked.connect(self.reject)
  133.         QtCore.QMetaObject.connectSlotsByName(self)
  134.     def setlabel(self,label):
  135.         sizePolicy = QtWidgets.QSizePolicy(
  136.             QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
  137.         sizePolicy.setHorizontalStretch(100)
  138.         sizePolicy.setVerticalStretch(100)
  139.         sizePolicy.setHeightForWidth(label.sizePolicy().hasHeightForWidth())
  140.         font = QtGui.QFont()
  141.         font.setFamily("宋体")
  142.         font.setPointSize(14)
  143.         font.setBold(True)
  144.         font.setWeight(75)
  145.         label.setFont(font)
  146.         pe = QtGui.QPalette()
  147.         pe.setColor(QtGui.QPalette.WindowText, QtCore.Qt.red)
  148.         label.setPalette(pe)

  149.     def retranslateUi(self, Dialog):
  150.         _translate = QtCore.QCoreApplication.translate
  151.         self.setWindowTitle(_translate("Dialog", "ERROR!"))
  152.         self.okButton.setText(_translate("Dialog", "&OK"))
  153.         self.cancelButton.setText(_translate("Dialog", "&Cancel"))
  154.         self.groupBox.setTitle(_translate("Dialog", ""))
  155.         self.text = '串口设置错误!'
  156.         self.label.setText(_translate("Dialog",
  157.                                       "<html><head/><body><p><span style=" font-size:11pt;">"
  158.                                       "1、串口是否连接正确</span></p><p><span style=" "
  159.                                       "font-size:11pt;">"
  160.                                       "2、串口号设置是否正确</span></p><p><span style=" "
  161.                                       "font-size:11pt;">"
  162.                                       "3、波特率是否设置正确</span></p><p><span style=" "
  163.                                       "font-size:11pt;">"
  164.                                       "4、设备地址是否正确</span></p></body></html>"))
  165.         self.label_2.setText(_translate("Dialog", "串口连接错误!请检查:"))



  166. class ApplicationWindow(QtWidgets.QMainWindow):
  167.     def __init__(self):
  168.         QtWidgets.QMainWindow.__init__(self)
  169.         self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
  170.         self.setWindowTitle("程序主窗口")
  171.         self.resize(650, 700)
  172.         self.mysetwidgets()
  173.     def mysetfont(self,fontnum):
  174.         if fontnum == 1:
  175.             font = QtGui.QFont("微软雅黑 Light",14)
  176.             font.setFamily("微软雅黑 Light")
  177.             font.setPointSize(14)
  178.             font.setBold(True)
  179.             font.setWeight(75)
  180.         elif fontnum == 2:
  181.             font = QtGui.QFont()
  182.             font.setFamily("微软雅黑 Light")
  183.             font.setPointSize(12)
  184.             font.setBold(True)
  185.             font.setWeight(75)
  186.         return  font

  187.     def mySetsizePolicy(self,sizenum):
  188.         if sizenum == 1:
  189.             sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
  190.                                                     QtWidgets.QSizePolicy.Preferred)
  191.             sizePolicy.setHorizontalStretch(80)
  192.             sizePolicy.setVerticalStretch(0)

  193.         elif sizenum == 2:
  194.             sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum,
  195.                                                QtWidgets.QSizePolicy.Preferred)
  196.             sizePolicy.setHorizontalStretch(50)
  197.             sizePolicy.setVerticalStretch(0)
  198.         elif sizenum == 3:
  199.             sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred,
  200.                                                QtWidgets.QSizePolicy.Preferred)
  201.             sizePolicy.setHorizontalStretch(100)
  202.             sizePolicy.setVerticalStretch(100)
  203.             sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
  204.         elif sizenum == 4:
  205.             sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
  206.             sizePolicy.setHorizontalStretch(100)
  207.             sizePolicy.setVerticalStretch(0)
  208.             sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth())
  209.         return sizePolicy

  210.     def mySetlabel(self,label,fontmun,textformat,alignment,name):

  211.         label.setFont(self.mysetfont(fontmun))
  212.         label.setTextFormat(textformat)
  213.         label.setAlignment(alignment)
  214.         label.setObjectName(name)
  215.     def mySetLCD(self,LCD):
  216.         LCD.setDigitCount(16)
  217.         LCD.setObjectName("lcd")
  218.         LCD.setSegmentStyle(QtWidgets.QLCDNumber.Flat)
  219.     def mysetwidgets(self):
  220.         ''''''
  221.         #以下设置主面板
  222.         self.main_widget = QtWidgets.QWidget(self)

  223.         self.main_widget.setSizePolicy(self.mySetsizePolicy(1))
  224.         self.main_widget.setGeometry(QtCore.QRect(10, 10, 600, 600))
  225.         self.main_widget.setObjectName("main_widget")
  226.         #以下设置网格
  227.         self.gridLayout = QtWidgets.QGridLayout(self.main_widget)
  228.         self.gridLayout.setObjectName("gridLayout")
  229.         #以下设置标签
  230.         self.mylabel = [QtWidgets.QLabel('温度℃',self.main_widget),
  231.                         QtWidgets.QLabel('压力KPa', self.main_widget),
  232.                         QtWidgets.QLabel('瞬时流量kg/min', self.main_widget),
  233.                         QtWidgets.QLabel('累计流量kg', self.main_widget),
  234.                         QtWidgets.QLabel('第一路', self.main_widget),
  235.                         QtWidgets.QLabel('第二路', self.main_widget)]
  236.         for i in range(6):
  237.             self.mySetlabel(self.mylabel[i],1,
  238.                             QtCore.Qt.RichText,QtCore.Qt.AlignCenter,
  239.                             "mylabel_1")
  240.             if i==4:
  241.                 self.mylabel[i].setSizePolicy(self.mySetsizePolicy(2))
  242.                 self.gridLayout.addWidget(self.mylabel[i], 1, 0, 1, 1)
  243.             elif i ==5:
  244.                 self.mylabel[i].setSizePolicy(self.mySetsizePolicy(2))
  245.                 self.gridLayout.addWidget(self.mylabel[i], 2, 0, 1, 1)
  246.             else:
  247.                 self.gridLayout.addWidget(self.mylabel[i], 0, i+1, 1, 1)
  248.         #以下设置LCD
  249.         #创建myLCD数组对应关系如下:
  250.         # myLCD[0] ---------第一路温度单位℃
  251.         # myLCD[1] ---------第一路压力单位KPa
  252.         # myLCD[2] ---------第一路瞬时流量单位kg/min
  253.         # myLCD[3] ---------第一路累计流量单位kg
  254.         # myLCD[4] ---------第二路温度单位℃
  255.         # myLCD[5] ---------第二路压力单位KPa
  256.         # myLCD[6] ---------第二路瞬时流量单位kg/min
  257.         # myLCD[7] ---------第二路累计流量单位kg
  258.         self.myLCD = [QtWidgets.QLCDNumber(self.main_widget),
  259.                       QtWidgets.QLCDNumber(self.main_widget),
  260.                       QtWidgets.QLCDNumber(self.main_widget),
  261.                       QtWidgets.QLCDNumber(self.main_widget),
  262.                       QtWidgets.QLCDNumber(self.main_widget),
  263.                       QtWidgets.QLCDNumber(self.main_widget),
  264.                       QtWidgets.QLCDNumber(self.main_widget),
  265.                       QtWidgets.QLCDNumber(self.main_widget),]
  266.         for i in range(8):
  267.             self.mySetLCD(self.myLCD[i])
  268.             if i<=3:
  269.                 self.gridLayout.addWidget(self.myLCD[i], 1, i + 1, 1, 1)
  270.             else:
  271.                 self.gridLayout.addWidget(self.myLCD[i], 2, i - 3, 1, 1)
  272.         #添加动态图
  273.         _translate = QtCore.QCoreApplication.translate
  274.         self.groupBox = QtWidgets.QGroupBox(self.main_widget)
  275.         self.groupBox.setSizePolicy(self.mySetsizePolicy(3))
  276.         self.groupBox.setSizeIncrement(QtCore.QSize(35, 56))
  277.         self.groupBox.setBaseSize(QtCore.QSize(430, 500))
  278.         self.groupBox.setFont(self.mysetfont(2))
  279.         self.groupBox.setTitle(_translate("Dialog", "流量记录"))
  280.         self.groupBox.setObjectName("groupBox")
  281.         self.gridLayout.addWidget(self.groupBox, 3, 0, 1, 5)
  282.         self.myFigure = MyDynamicMplCanvas(self.groupBox, width=5, height=3, dpi=100)
  283.         self.myFigure.setGeometry(QtCore.QRect(10, 20, 700, 520))
  284.         #以下设置报警及按钮
  285.         #在hLayoutWidget上创建水平布局,安放报警提示和按钮
  286.         self.hLayoutWidget = QtWidgets.QWidget(self)
  287.         self.hLayoutWidget.setGeometry(QtCore.QRect(10, 650, 700, 41))
  288.         self.hLayoutWidget.setObjectName("horizontalLayoutWidget")
  289.         self.hLayout = QtWidgets.QHBoxLayout(self.hLayoutWidget)
  290.         self.hLayout.setObjectName("horizontalLayout")
  291.         self.groupBox_2 = QtWidgets.QGroupBox(self.hLayoutWidget)
  292.         self.groupBox_2.setSizePolicy(self.mySetsizePolicy(4))
  293.         self.groupBox_2.setTitle("")
  294.         self.groupBox_2.setObjectName("groupBox_2")
  295.         self.hLayout.addWidget(self.groupBox_2)
  296.         #添加按钮
  297.         spacerItem0 = QtWidgets.QSpacerItem(40, 20,
  298.                                             QtWidgets.QSizePolicy.Expanding,
  299.                                             QtWidgets.QSizePolicy.Minimum)
  300.         self.hLayout.addItem(spacerItem0)
  301.         self.Btn_start = QtWidgets.QPushButton(self.hLayoutWidget)
  302.         self.Btn_start.setObjectName("Btn_start")
  303.         self.hLayout.addWidget(self.Btn_start)
  304.         spacerItem = QtWidgets.QSpacerItem(40, 20,
  305.                                            QtWidgets.QSizePolicy.Expanding,
  306.                                            QtWidgets.QSizePolicy.Minimum)
  307.         self.hLayout.addItem(spacerItem)
  308.         self.Btn_close = QtWidgets.QPushButton(self.hLayoutWidget)
  309.         self.Btn_close.setObjectName("Btn_close")
  310.         self.hLayout.addWidget(self.Btn_close)
  311.         spacerItem1 = QtWidgets.QSpacerItem(40, 20,
  312.                                             QtWidgets.QSizePolicy.Expanding,
  313.                                             QtWidgets.QSizePolicy.Minimum)
  314.         self.hLayout.addItem(spacerItem1)
  315.         self.Btn_start.setText(_translate("Dialog", "开始"))
  316.         self.Btn_close.setText(_translate("Dialog", "结束"))







  317.         self.main_widget.setFocus()
  318.         self.setCentralWidget(self.main_widget)


  319. class WorkThread(QtCore.QThread):
  320.     trigger = QtCore.pyqtSignal()
  321.     ischange = False
  322.     list_int_n = []
  323.     def __int__(self):
  324.         super(WorkThread, self).__init__()
  325.     def run(self):

  326.         while True:
  327.             #print(self.ischange)
  328.             if self.ischange:
  329.                 try:
  330.                     self.instrument = minimalmodbus.Instrument('com2', 4)
  331.                     self.instrument.serial.baudrate = 9600
  332.                     self.list_int_n = self.instrument.read_registers(0, 8, 4)
  333.                 except:
  334.                     self.trigger.emit()
  335.                     self.ischange = False
  336.                     time.sleep(1)
  337.             #print(self.ischange)
  338.         print(self.list_int_n)

  339.         #self.trigger.emit()  # 循环完毕后发出信号


  340. class myWindow(ApplicationWindow):
  341.     def __init__(self):
  342.         super(myWindow,self).__init__()
  343.         self.Btn_start.clicked.connect(self.mystart)
  344.         self.int_n =[]
  345.         self.x = []
  346.         self.y1 = []
  347.         self.y2 = []
  348.         self.time = time.time()

  349.         self.timer = QtCore.QTimer()
  350.         self.recordtimer = QtCore.QTimer()
  351.         self.workThread = WorkThread()
  352.         self.workThread1 = WorkThread()

  353.         self.Btn_start.clicked.connect(self.mystart)
  354.         self.timer.timeout.connect(self.myrun)
  355.         self.recordtimer.timeout.connect(self.myrecord)
  356.         self.ischange = False
  357.     def mystart(self):
  358.         self.timer.start(200)
  359.         self.workThread.start()
  360.         self.recordtimer.start(1000)
  361.         self.time = time.time()
  362.         #self.workThread1.start()

  363.         #self.workThread.trigger.connect(self.timeStop)
  364.         self.ischange = True
  365.     def myrun(self):
  366.         self.workThread.trigger.connect(self.showErrorDialog)
  367.         self.workThread.ischange = self.ischange
  368.         self.int_n = self.workThread.list_int_n
  369.         #print(self.int_n)
  370.         if len(self.int_n) >=8:
  371.             for i in range(8):
  372.                 self.myLCD[i].display('{:.2f}'.format(self.int_n[i]))
  373.     def showErrorDialog(self):
  374.         self.workThread.ischange = False
  375.         self.ischange = False
  376.         self.timer.stop()
  377.         self.recordtimer.stop()
  378.         #time.sleep(1)
  379.         self.errorwindow = errorDialog()
  380.         self.errorwindow.show()


  381.     def myrecord(self):
  382.         if self.ischange and len(self.int_n)>=8 :
  383.             if len(self.x)>=101:
  384.                 self.x = self.x[1:]
  385.             self.x.append(time.time() - self.time)

  386.             if len(self.y1) >= 101:
  387.                 self.y1 = self.y1[1:]
  388.             self.y1.append(self.int_n[0])
  389.             if len(self.y2) >= 101:
  390.                 self.y2 = self.y2[1:]
  391.             self.y2.append(self.int_n[1])
  392.             self.myFigure.x = self.x
  393.             self.myFigure.y1 = self.y1
  394.             self.myFigure.y2 = self.y2
  395.         pass


  396. app = QtWidgets.QApplication(sys.argv)

  397. myWindow = myWindow()

  398. myWindow.show()
  399. sys.exit(app.exec_())
复制代码

回复

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2016-8-30 17:23:38 | 显示全部楼层
Py_DecRef 这个方法不存在, 第一感觉就是版本兼容的问题, 换一下其他版本试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表