我有一个函数需要一个线程,我使用一个QThread来处理它,在这个函数中有一些win32com调用,但是它们正在引发AttributeError。
为什么会发生这种事,我能解决吗?
下面是一些代码:
class MyThread(QtCore.QThread):
def __init__(self):
super(MyThread, self).__init__()
def run(self):
FB2K = foobar()
while True:
CurrentVolume = float(FB2K.currentVolumeLevel().strip('dB'))
FB2K.setVolumeLevel(CurrentVolume - 0.1)
sleep(1)
class MainFrame(QWidget):
def __init__(self):
QWidget.__init__(self)
self.button = QPushButton(self)
self.thread = MyThread()
self.button.clicked.connect(self.my_function)
def my_function(self):
self.thread.start()如果运行此脚本并单击按钮,它将引发AttributeError:
Traceback (most recent call last):
File "C:/My Python Programs/foobar_acess.py", line 18, in run
CurrentVolume = float(FB2K.currentVolumeLevel().strip('dB'))
File "C:\Python27\pyfoobar.py", line 50, in currentVolumeLevel
return str(playback.Settings.Volume) + "dB"
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.Settings吡咯烷酮是一个访问foobar2000的模块,它可以设置音量、捕捉歌曲名等。
它是围绕win32com模块构建的,回放(引发错误的那个)是:
playback = win32com.client.Dispatch("Foobar2000.Application.0.7")如果QThread不运行,run()下的代码可以正常工作,但是它会冻结UI,因为使用了while循环。
发布于 2014-12-09 02:31:51
不知道为什么这个能修好它。但以下是如何:
class MyThread(QtCore.QThread):
def __init__(self):
super(MyThread, self).__init__()
def run(self):
import win32com.client
import pythoncom
pythoncom.CoInitialize()
ProgID = "Foobar2000.Application.0.7"
foobar_COM_object = win32com.client.Dispatch(ProgID)
playback = foobar_COM_object.Playback
while True:
playback.Settings.Volume -= 0.1
sleep(1)
class MainFrame(QWidget):
def __init__(self):
QWidget.__init__(self)
self.button = QPushButton(self)
self.thread = MyThread()
self.button.clicked.connect(self.my_function)
def my_function(self):
self.thread.start()https://stackoverflow.com/questions/27369995
复制相似问题