Форум сайта python.su
Всем привет. Сейчас изучаю Python, прохожу курс на Coursera. Собственно вопрос. В процесе обучения написал очень простую игру. Логика лежит в отдельном классе. В другом файле создан класс, реализующий графический интерфейс. Вот код обеих файлов:
guess_the_number.py
import random import math import guess_the_number_GUI class GuessTheNumber: def __init__(self): self.guess_range = 100 self.secret_number = 0 self.attempts = 0 self.new_game() # helper function to start and restart the game def new_game(self): # initialize global variables used in your code here self.attempts = int(math.ceil(math.log(self.guess_range, 2))) self.secret_number = random.randrange(0, self.guess_range) print '-----------------' print 'New game started!' print 'Range is [0, %i)' % self.guess_range print 'You have', self.attempts, 'attempts' print 'Good luck!' print '-----------------' # define event handlers for control panel def range100(self): # button that changes the range to [0,100) and starts a new game self.guess_range = 100 self.new_game() def range1000(self): # button that changes the range to [0,1000) and starts a new game self.guess_range = 1000 self.new_game() def input_guess(self, inp): self.inp = int(inp) print 'Your guess is', self.inp if self.inp < self.secret_number: self.attempts -= 1 if self.attempts > 0: print 'Higher!' print self.attempts, 'attempts left.' elif self.inp == self.secret_number: print 'Correct!' print '' self.new_game() elif self.inp > 0: self.attempts -= 1 if self.attempts > 0: print 'Lower!' print self.attempts, 'attempts left.' if not self.attempts: print 'Secret numer is', self.secret_number print 'You loose! :(' print '' self.new_game() print '' guess_the_number_GUI.start_gui(GuessTheNumber())
import sys from PyQt4 import QtGui, QtCore class GuessTheNumberGui(QtGui.QWidget): def __init__(self, game, parent=None): QtGui.QWidget.__init__(self, parent) self.gtn_game = game self.setWindowTitle('Guess the number!') self.setGeometry(900, 400, 320, 240) grid = QtGui.QGridLayout() self.range100_button = QtGui.QPushButton('Set range to [0 - 100)') self.range1000_button = QtGui.QPushButton('Set range to [0 - 1000)') self.guess_input_entry = QtGui.QLineEdit() grid.addWidget(self.range100_button, 0, 0) grid.addWidget(self.range1000_button, 1, 0) grid.addWidget(self.guess_input_entry, 2, 0) self.range100_button.clicked.connect(self.gtn_game.range100) self.range1000_button.clicked.connect(self.gtn_game.range1000) self.guess_input_entry.returnPressed.connect(self.gtn_game.input_guess) self.setLayout(grid) def start_gui(game): app = QtGui.QApplication(sys.argv) gui = GuessTheNumberGui(game) gui.show() sys.exit(app.exec_())
Офлайн
Собственно вроде бы нашел решение, оно работает, но не знаю насколько правильно так делать. Добавил метод класса GuessTheNumberGUI, следующего содержания:
def send_line(self): self.gtn_game.inputt_guess(self.guess_input_entry.test())
self.guess_input_entry.returnPressed.connect(self.return_line)
Офлайн
Вроде бы разобрался
self.guess_input_entry.returnPressed.connect(lambda: self.gtn_game.input_guess(self.guess_input_entry.text()))
Офлайн