için ikinci bir pencere aç QMainWindow üzerindeki bir düğme tıklatıldığında özel bir QDialog penceresi göstermek için pyqt kullanmaya çalışıyorum. Aşağıdaki hatayı almaya devam: Birkaç çevrimiçi öğreticiler üzerine gittimPyQt
$ python main.py
DEBUG: Launch edit window
Traceback (most recent call last):
File "/home/james/Dropbox/Database/qt/ui_med.py", line 23, in launchEditWindow
dialog = Ui_Dialog(c)
File "/home/james/Dropbox/Database/qt/ui_edit.py", line 15, in __init__
QtGui.QDialog.__init__(self)
TypeError: descriptor '__init__' requires a 'sip.simplewrapper' object but received a 'Ui_Dialog'
, ancak bunların çoğu yerleşik iletişim penceresinden olmayan bir nasıl kullanılacağını gösteren sadece kısa durdurun. Pyuic4 kullanarak hem ana pencere hem de diyalog için kod oluşturdum. İlgili kodun ne olması gerektiğini düşünüyorum. Burada neyi özlüyorum?
class Ui_Dialog(object):
def __init__(self, dbConnection):
QtGui.QDialog.__init__(self)
global c
c = dbConnection
class Ui_MainWindow(object):
def __init__(self, dbConnection):
global c
c = dbConnection
def launchEditWindow(self):
print "DEBUG: Launch edit window"
dialog = QtGui.QDialog()
dialogui = Ui_Dialog(c)
dialogui = setupUi(dialog)
dialogui.show()
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
conn = sqlite3.connect('meds.sqlite')
c = conn.cursor()
self.ui = Ui_MainWindow(c)
self.ui.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
program = StartQT4()
program.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Bonus soru: Eğer aksi iyi yolu küresel olması (kötü adlı "C") bir argüman olarak geçirilebilir bir şey kuruyor, PyQt fonksiyon geri çağrıları argümanları geçemez gibi görünüyor beri Bu fonksiyonlara bilgi almak için?
'Ui_MainWindow .__ init__' bir argümana sahiptir:' dbConnection' geçemezsiniz: 'self.ui = Ui_MainWindow()' - Kodunuz nasıl çalışır? – fviktor
Whoops. Sorunun bir parçası olup olmadığını görmek için veritabanı nesnelerini geçici olarak kaldırdım. Ardından, kodu tekrar girdikten sonra kodu yeniden yazmayı ve yeniden kaydetmeyi unuttum. – James