远程管理linux服务器的xftp到期了,相比命令模式,无非就是多了GUI界面,自己尝试做个远程管理脚本,配上GUI,也应该够用了。
难点在于鼠标双击更新列表给Listview,前期拿本地资源管理练手。
树形资源管理能轻松实现,qt本身自带Qtreeview,但总归有点不习惯
import os
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QStringListModel
import string
def root(): #扫描盘符
ss = []
for a in string.ascii_uppercase:
b = a + ':\\'
if os.path.exists(b):
ss.append(b)
return ss
class XWindon(QMainWindow):
def __init__(self):
super().__init__()
self.setFixedSize(800,600)
self.setWindowTitle('Explorer---by 易酆')
self.view = QListView()
self.model = QStringListModel()
self.path = ''
self.text = QLineEdit()
self.text.setReadOnly(True)
self.text.setText(self.path) #用来显示更新的地址
self.ui()
self.main(root()) #显示盘符列表
self.show()
def ui(self):
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.text)
self.vbox.addWidget(self.view)
self.center_widget = QWidget()
self.center_widget.setLayout(self.vbox)
self.setCentralWidget(self.center_widget)
def main(self, stringlist): #显示盘符列表
self.model.setStringList(stringlist)
self.view.setModel(self.model)
self.view.doubleClicked.connect(self.refresh) #双击条目后显示被双击的盘符下所有文件夹和文件
def refresh(self, item): #逐层打开目录并逐层返回上层目录
ss=['.','..']
if os.path.isdir(self.path+item.data()):
self.path1 = self.path + item.data()
self.path1 = os.path.realpath(self.path1)
else:
self.path1 = self.path
self.model = None
model = QStringListModel()
view = QListView()
if os.path.realpath(self.path) in root() and item.data() == '..':
# print('aaaa')
model.setStringList(root())
view.setModel(model)
self.vbox.replaceWidget(self.view, view)
self.view = view
view.doubleClicked.connect(self.refresh)
self.path1 = ''
elif os.path.exists(self.path1):
for name in os.listdir(self.path1):
ss.append(name)
model.setStringList(ss)
view.setModel(model)
self.vbox.replaceWidget(self.view, view)
self.view = view
view.doubleClicked.connect(self.refresh)
self.path1 += '\\'
else:
pass
self.path = self.path1
self.text.setText(self.path)
if __name__=='__main__':
app = QApplication(sys.argv)
x = XWindon()
sys.exit(app.exec_())