Я пишу свое первое настольное приложение и борюсь с экземплярами классов.Это приложение представляет собой простую программу FTP с использованием Paramiko.Пока что я настроил это connection.py, который выглядит примерно так ...
#connect.py
import user, db
import paramiko, time, os
paramiko.util.log_to_file('paramiko-log.txt')
class Connection:
def __init__(self):
#Call DB Functions
database = db.Database()
#Set Transport
self.transport = paramiko.Transport((user.hostname, user.port))
#User Credentials
username = user.username
password = user.password
self.transport.connect(username = username, password = password)
self.sftp = paramiko.SFTPClient.from_transport(self.transport)
print "Set your credentials in user.py for now!"
msg = "Connecting as: %s, on port number %d" % (user.username, user.port)
print msg
def disconnect(self):
print "Closing connection..."
self.sftp.close()
self.transport.close()
print "Connection closed."
Довольно просто.Подключи и отключи.Этот файл connect.py импортируется в main.py (это мой графический интерфейс)
#main.py
import connect
from PySide import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
windowWidth = 550
windowHeight = 350
self.establishedConnection = ""
connectButton = self.createButton("&Connect", self.conn)
disconnectButton = self.createButton("&Disconnect", self.disconnect)
grid = QtGui.QGridLayout()
grid.addWidget(connectButton, 3, 3)
grid.addWidget(disconnectButton, 4, 3)
grid.addWidget(self.createList(), 1, 0, 1, 4)
self.setLayout(grid)
self.resize(windowWidth, windowHeight)
self.setWindowTitle("FTP Program")
def conn(self):
connection = connect.Connection()
self.establishedConnection = connection
def disconnect(self):
self.establishedConnection.disconnect()
def createButton(self, text, member):
button = QtGui.QPushButton(text)
button.clicked.connect(member)
return button
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
gui = Window()
gui.show()
sys.exit(app.exec_())
Проблема отключается.Я думал, что __init__
создаст экземпляр класса Connection()
.Если вы посмотрите на файл main.py, вы увидите, что я попытался создать переменную self.connectionEstablished
, чтобы сохранить объект, чтобы позже я мог вызвать для него функцию connect.
Куда я иду не так?Я довольно плохо знаком с Python и другими языками, не относящимися к сети (я трачу большую часть своего времени на написание приложений для RoR и php).
Ошибки не отображаются в любое время, и я запустил это приложение как терминальное приложение, поэтому я знаю, что connect.py работает как положено.
Редактировать: Итак, я думаю, что Senderle получилсообщение закрыто, это то, что я тоже хотел бы увидеть, но это не так.Я отмечу лучший ответ, если увижу что-то, что решает мою проблему.
Правка Решено: Соедините connect.py и main.py в один файл, чтобы упростить задачу.И по какой-то причине это решило проблемы.Итак, кто знает, что происходит.Я все еще собираюсь удержать «лучший ответ».Если кто-то может сказать мне, почему у меня не может быть такого файла, тогда я весь в ушах.