我正在编写我的第一个桌面应用程序,我正在努力处理类实例。这个应用程序是一个使用 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 和其他非网络语言相当陌生(我大部分时间都在编写 RoR 和 php 应用程序)。
任何时候都不会显示任何错误,我将这个应用程序作为终端应用程序启动,所以我知道 connect.py 确实按预期工作。
编辑:所以我猜 Senderle 收到了连接关闭消息,这也是我希望看到的,但我不是。如果我看到可以解决我的问题的东西,我会标记一个最佳答案。
编辑解决:将 connect.py 和 main.py 推入一个文件以简化事情。出于某种原因,这解决了问题。所以谁知道发生了什么。我仍然会推迟“最佳答案”。如果有人能告诉我为什么我不能有这样的拆分文件,那么我会全神贯注。