私は最初のデスクトップアプリを書いていますが、クラスインスタンスで苦労しています。このアプリは、paramikoを使用したシンプルなftpプログラムです。これまでに設定したのは、次のような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(私のGUI)にインポートされています
#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
後でdisconnectを呼び出すことができるように、オブジェクトを保存するために変数を作成しようとしたことがわかります。
どこが間違っているのですか?私はPythonやその他の非Web言語にかなり慣れていません(ほとんどの時間をRoRおよびphpアプリの作成に費やしています)。
エラーは表示されません。このアプリをターミナルアプリとして起動したので、connect.pyが意図したとおりに機能することはわかっています。
編集:それで、Senderleは接続が閉じられたというメッセージを受け取ったと思います。これも私が見たいものですが、そうではありません。問題を解決する何かを見つけたら、ベストアンサーをマークします。
解決済みの編集:connect.pyとmain.pyを1つのファイルにプッシュして、作業を簡素化しました。そして、何らかの理由でそれは物事を解決しました。だから誰が何が起こっているのか知っています。私はまだ「ベストアンサー」を延期するつもりです。誰かが私がそのような分割ファイルを持つことができない理由を教えてくれるなら、私はすべての耳です。