2009-10-25 106 views
0

我仍然在學習Python和PyQt4,當我推送「收穫」按鈕時,我似乎無法在我的GUI窗口上顯示任何內容。我大膽地強調了我對信號和插槽缺乏瞭解。PyQt4信號和插槽

更新的代碼:

import sys, random, sqlite3, os 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4 import QtGui, QtCore 
from geodesic import Ui_MainWindow 

class gameWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(gameWindow, self).__init__(parent) 
     QtGui.QMainWindow.__init__(self) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

     buttonHarvest = QPushButton("Harvest") #Create the harvest button - but QT Designer made it? 
     buttonMining = QPushButton("Mining") # Create the mining button - but QT Designer made it? 
     self.label = QLabel("Example") # Set the empty label that's not showing 

     self.connect(buttonHarvest, SIGNAL("clicked()"), self.skillHarvest) #Gets from def skillHarvest 
     self.setWindowTitle("Geodesic") 
     # Next ------------------------------------------------------------------------------------- 
     self.connect(buttonMining, SIGNAL("clicked()"), self.skillMining) #Gets from def skillMining 

    def skillHarvest(self): 
     harvest = "You find some roots." 
     self.label.setText(harvest) 

    def skillMining(self): 
     mining = "You found some gold." 
     self.label.setText(mining) 

app = QApplication(sys.argv) 
showWindow = gameWindow() 
showWindow.show() 
app.exec_() 

回答

1

解決:

import sys, random, sqlite3, os 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4 import QtGui, QtCore 
from geodesic import Ui_MainWindow 

class gameWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(gameWindow, self).__init__(parent) 
     QtGui.QMainWindow.__init__(self) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

     buttonHarvest = self.ui.buttonHarvest 
     buttonMining = self.ui.buttonMining 
     #showLabel = self.ui.label 

     self.connect(buttonHarvest, SIGNAL("clicked()"), self.onButtonHarvest) 
     # Next 
     self.connect(buttonMining, SIGNAL("clicked()"), self.onButtonMining) 

    def onButtonHarvest(self): 
     harvest = "You find some roots." 
     showLabel = self.ui.label 
     showLabel.setText(harvest) 

    def onButtonMining(self): 
     mining = "You found some gold." 
     showLabel = self.ui.label 
     showLabel.setText(mining) 

app = QApplication(sys.argv) 
showWindow = gameWindow() 
showWindow.show() 
app.exec_() 
1

在我看來,對於方法「一」的定義是嚴重縮進。

對您的示例,它已被聲明爲TestApp的子函數。 init(),所以從外面你不能調用one()。嘗試unindent one()的定義使其成爲TestApp類的一個方法。

+0

我對代碼進行了一些更改,但仍然無法正常工作。一切都很好,我可以看到附帶按鈕的窗口。但仍然當按鈕被激活時沒有任何反應。 – Dunwitch 2009-10-25 20:23:42

1

僅供參考,對於信號到插槽的連接,你可以使用更多的 「Python化」 形式:

buttonHarvest.clicked.connect(self.onButtonHarvest) 
buttonMining.clicked.connect(self.onButtonMining) 

它是這樣的:

widget.signal.connect(slot) 

您可能會找到更多信息here

+0

哦,我的glob,我從來不知道這種格式!謝謝! – 2012-01-23 01:09:29