2012-11-26 17 views
10

Khi (và chỉ khi) tôi bỏ ứng dụng của tôi, những (và chỉ những) nhắn lặp đi lặp lại xuất hiện trên cửa sổ lệnh:Tại sao tôi nhận được "QTimer chỉ có thể được sử dụng với chủ đề bắt đầu với QThread" tin nhắn nếu tôi không có QTimer trong mã của tôi?

QObject::startTimer: QTimer can only be used with threads started with QThread 
QObject::startTimer: QTimer can only be used with threads started with QThread 
QObject::startTimer: QTimer can only be used with threads started with QThread 

này khá lạ đối với tôi, vì tôi không bao giờ sử dụng QTimer trong mã của tôi (hoặc QThread). Trên thực tế, không có lỗi hoặc sự cố xảy ra khi sử dụng ứng dụng, vì vậy đây không phải là vấn đề thực sự. Điều này xảy ra ở cả Windows và Linux OS.

Tất cả hàng nhập khẩu của tôi:

from __future__ import print_function 
from PyQt4.QtGui import (QApplication, QMainWindow, 
         QFileSystemModel, QTreeView, QTableView, 
         QAbstractItemView, QMenu, QAction, QKeyEvent) 
from PyQt4.QtCore import QDir, Qt, SIGNAL, QString, QFileInfo, QCoreApplication 
import sys 

Các chức năng chính:

def main(): 
    app = QApplication(sys.argv) 
    app.setApplicationName("QFM") 
    app.setStyle("plastique") 
    gui = MainWindow() 
    gui.show() 
    app.exec_() 

Có lẽ nó có thể là một cái gì đó liên quan đến QFileSystemWatcher (được sử dụng bởi QFileSystemModel), tôi đoán ... có lẽ nó sử dụng một số QTimer Tính năng, đặc điểm.

+0

Bạn có thể chỉ ra dòng mã nào của bạn mà các thư này gây ra không? – Kai

+0

Tuyệt đối không, 2 hoặc 3 dòng lặp lại này là thông tin duy nhất được trao cho tôi !!! : - |. – iacopo

+0

Thử thêm một số đầu ra của bảng điều khiển để tìm dòng mã gây ra. – Kai

Trả lời

10

Tôi đã gặp sự cố tương tự trong quá khứ.

Các QFileSystemModeldocumentation page nói như sau:

QFileSystemModel.__init__ (self, QObject parent = None)

Đối số phụ huynh, nếu không muốn nói Không, nguyên nhân tự để được sở hữu bởi Qt thay vì PyQt.

Xây dựng mô hình hệ thống tệp với cha mẹ đã cho.

Nếu bạn không vượt qua một đối số parent thì thu gom rác Python có thể xóa các đối tượng không đúng lúc và là một tác dụng phụ gây lỗi mà bạn đề cập đến. Lời khuyên của tôi là để đảm bảo rằng các đối tượng của bạn có một phụ huynh thích hợp. Tôi nghĩ rằng nó nên khắc phục vấn đề.

PS: Tôi chưa kiểm tra tài liệu cho mọi lớp bạn sử dụng. Có lẽ QFileSystemModel không phải là lớp duy nhất mà điều này xảy ra.

+0

Tôi gặp vấn đề tương tự với lớp '' QCompleter'' – chip

3

Trong kinh nghiệm của tôi điều này xảy ra khi tôi phân lớp một lớp Qt và một trong các thành viên của lớp con không phải là một phần của phân cấp Qt. Ví dụ:

class MainWindow(QMainWindow): 
    def __init__(self, *args, **kwargs): 
     super(MainWindow, self).__init__(*args, **kwargs) 
     ... 
     self.my_widget = MyWidget() 
     ... 

Nếu tôi thực hiện MyWidget theo cách này, nó sẽ cung cấp cho tôi những lỗi QTimer khi đối tượng bị hủy diệt:

class MyWidget(object): 
    def __init__(self): 
     # do stuff 

Tuy nhiên, nếu MyWidget thừa hưởng từ QObject sau đó không có lỗi xảy ra:

class MyWidget(QObject): 
    def __init__(self, parent): 
     super(MyWidget, self).__init__(parent) 
     #do stuff 
Các vấn đề liên quan