我试图从函数外部访问变量。我添加了global sayac
和global sayi
(从其他相关问题中看到了这一点),但我仍然无法访问它们。这是我遇到问题的程序的一部分:
def guesss(self):
global tahmin
global sayac
tahmin=self.tahminn.text()
sayac=sayac +1
tahmin = int(tahmin)
if tahmin==sayi:
self.durum.setText ("Tahmininiz doğru!")
QtGui.QMessageBox.warning(None,"Tahmininiz doğru","Doğru sayıyı ",sayac," denemede buldunuz!")
self.tahminett.setEnabled(False)
self.tahminn.setEnabled(False)
self.ybaslatt.show()
elif tahmin>sayi:
self.durum.setText("Tahmininiz doğru sayıdan büyük.")
elif tahmin<sayi:
self.durum.setText("Tahmininiz doğru sayıdan küçük.")
else:
QtGui.QMessageBox.warning(None,"Geçersiz sayı","Sadece 1 ile 100 arasında bir sayı girebilirsiniz.")
完整计划:
import random
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(473, 326)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.baslatt = QtGui.QPushButton(self.centralwidget)
self.baslatt.setGeometry(QtCore.QRect(40, 240, 121, 41))
self.baslatt.setObjectName(_fromUtf8("baslatt"))
self.tahminett = QtGui.QPushButton(self.centralwidget)
self.tahminett.setGeometry(QtCore.QRect(300, 240, 121, 41))
self.tahminett.setObjectName(_fromUtf8("tahminett"))
self.tahminn = QtGui.QLineEdit(self.centralwidget)
self.tahminn.setGeometry(QtCore.QRect(90, 100, 261, 22))
self.tahminn.setObjectName(_fromUtf8("tahminn"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 30, 451, 41))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 100, 47, 14))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(30, 170, 57, 14))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.durum = QtGui.QLabel(self.centralwidget)
self.durum.setGeometry(QtCore.QRect(90, 170, 241, 16))
self.durum.setText(_fromUtf8(""))
self.durum.setObjectName(_fromUtf8("durum"))
self.hakkinda = QtGui.QPushButton(self.centralwidget)
self.hakkinda.setGeometry(QtCore.QRect(180, 240, 101, 41))
self.hakkinda.setObjectName(_fromUtf8("hakkinda"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 473, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
QtCore.QObject.connect(self.hakkinda, QtCore.SIGNAL(_fromUtf8("clicked()")), self.hakkindamsg)
QtCore.QObject.connect(self.baslatt, QtCore.SIGNAL(_fromUtf8("clicked()")), self.baslat_btn)
QtCore.QObject.connect(self.tahminett, QtCore.SIGNAL(_fromUtf8("clicked()")), self.guesss)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.tahminett.setEnabled(False)
self.tahminn.setEnabled(False)
def hakkindamsg(self):
QtGui.QMessageBox.about(None, "Hakkında", "Ege Öz 2014")
def baslat_btn(self):
sayac=0
self.tahminn.setEnabled(True)
self.tahminett.setEnabled(True)
self.baslatt.setEnabled(False)
sayi=random.randint(0,100)
self.durum.setText("1-100 arası bir sayı girin.")
return sayi
return sayac
def guesss(self):
global tahmin
global sayac
tahmin=self.tahminn.text()
sayac=sayac +1
tahmin = int(tahmin)
if tahmin==sayi:
self.durum.setText ("Tahmininiz doğru!")
QtGui.QMessageBox.warning(None,"Tahmininiz doğru","Doğru sayıyı ",sayac," denemede buldunuz!")
self.tahminett.setEnabled(False)
self.tahminn.setEnabled(False)
self.ybaslatt.show()
elif tahmin>sayi:
self.durum.setText("Tahmininiz doğru sayıdan büyük.")
elif tahmin<sayi:
self.durum.setText("Tahmininiz doğru sayıdan küçük.")
else:
QtGui.QMessageBox.warning(None,"Geçersiz sayı","Sadece 1 ile 100 arasında bir sayı girebilirsiniz.")
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "Sayıyı Bul", None))
self.baslatt.setText(_translate("MainWindow", "Başlat", None))
self.tahminett.setText(_translate("MainWindow", "Tahmin Et", None))
self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-weight:600;\">Python-Sayı Tahmin Oyunu </span></p><p>Başlamak için "Başlat" düğmesine basın ve 1-100 arasında bir sayı girin.</p></body></html>", None))
self.label_2.setText(_translate("MainWindow", "Tahmin:", None))
self.label_3.setText(_translate("MainWindow", "", None))
self.hakkinda.setText(_translate("MainWindow", "Hakkında", None))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
答案 0 :(得分:1)
在提出问题时,通常包含问题本身的好形式,以及事情表现如何以及预期结果的指示。
要记住global
的主要内容是它不会创建变量。它只通知编译器这些名称属于外部作用域(模块级而不是函数级)。因此组合如:
global sayac
sayac=sayac +1
要求已将sayac
设置为您可以添加一个的内容。代码实际上没有任何设置它们最初。
此外,baslat_btn
似乎至少存在两个问题:
def baslat_btn(self):
sayac=0
#...
sayi=random.randint(0,100)
#...
return sayi
return sayac
首先,在此函数中没有global
语句。因此,这两个变量在本地范围内。其次,该函数只能返回一次,因此只返回sayi
,尽管看起来这个返回值仍未使用。
最后,你为什么要使用全球范围?似乎所有逻辑都包含在一个Ui_MainWindow
对象中;它没有理由不能保持国家。考虑到它与MainWindow的紧密联系,一些编码风格会使它成为QMainWindow的子类。
答案 1 :(得分:0)
我建议尝试在声明变量的地方使用global关键字,然后再使用变量。每当我遇到使用全局变量的问题时,我就会这样做。