-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathMyMainWindow.py
163 lines (131 loc) · 5.81 KB
/
MyMainWindow.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
import sys,os
import json
from PyQt5.QtWidgets import QApplication, QMainWindow,QFileDialog,QMdiArea,QMessageBox
from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5.QtGui import QIcon
from GUI.ui_MainWindow import Ui_MainWindow
from About import QmyAbout
from AddPlug import QmyAddPlug
from AutoGetFlag import QmyGetFlag
from CipherAnalyse import QmyCipher
from MyFormDoc import QmyFormDoc
class QmyMainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent) #调用父类构造函数,创建窗体
self.ui=Ui_MainWindow() #创建UI对象
self.ui.setupUi(self) #构造UI界面
self.setWindowIcon(QIcon("./GUI/images/0.png"))
self.setCentralWidget(self.ui.mdiArea) #填充满工作区
# self.setWindowState(Qt.WindowMaximized) #窗口最大化显示
self.ui.mainToolBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
self.ui.actCipher_Analyse.setEnabled(True) #启用action
self.ui.actAuto_Flag.setEnabled(True)
self.ui.actCipher_Plug.setEnabled(True)
## ==============事件处理函数===================
def closeEvent(self, event):
reply = QMessageBox.question(self,'温馨提示','你确定要退出吗?',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
if reply == QMessageBox.Yes:
self.ui.mdiArea.closeAllSubWindows() #关闭所有子窗口
event.accept()
else:
event.ignore()
## ==============自定义功能函数============
def __enableEditActions(self,enabled):
self.ui.actEdit_Font.setEnabled(enabled)
self.ui.actDoc_CloseALL.setEnabled(enabled)
## ==========由connectSlotsByName() 自动连接的槽函数==================
@pyqtSlot() ##新建
def on_actDoc_New_triggered(self):
formDoc = QmyFormDoc(self)
self.ui.mdiArea.addSubWindow(formDoc) #文档窗口添加到MDI
formDoc.show() #在单独的窗口中显示
self.__enableEditActions(True)
@pyqtSlot() ##打开
def on_actDoc_Open_triggered(self):
needNew=False # 是否需要新建子窗口
if len(self.ui.mdiArea.subWindowList())>0: #如果有打开的MDI窗口,获取活动窗口
formDoc=self.ui.mdiArea.activeSubWindow().widget()
needNew=formDoc.isFileOpened() #文件已经打开,需要新建窗口
else:
needNew=True
curPath=os.getcwd() #获取当前路径
filename=QFileDialog.getOpenFileName(self,"打开一个文件",curPath,
"文本文件(*.txt);;所有文件(*.*)")[0]
if (filename==""):
return
if(needNew):
formDoc = QmyFormDoc(self) #必须指定父窗口
self.ui.mdiArea.addSubWindow(formDoc) #添加到MDI区域
formDoc.loadFromFile(filename)
formDoc.show()
self.__enableEditActions(True)
@pyqtSlot() ##关闭全部
def on_actDoc_CloseALL_triggered(self):
reply = QMessageBox.question(self,'温馨提示','你确定要关闭全部吗?',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
if reply == QMessageBox.Yes:
self.ui.mdiArea.closeAllSubWindows()
@pyqtSlot(bool) ##MDI模式
def on_actMDI_Mode_triggered(self,checked):
if checked: #Tab多页显示模式
self.ui.mdiArea.setViewMode(QMdiArea.TabbedView) #Tab多页显示模式
self.ui.mdiArea.setTabsClosable(True) #页面可关闭
self.ui.actMDI_Cascade.setEnabled(False)
self.ui.actMDI_Tile.setEnabled(False)
else: #子窗口模式
self.ui.mdiArea.setViewMode(QMdiArea.SubWindowView) #子窗口模式
self.ui.actMDI_Cascade.setEnabled(True)
self.ui.actMDI_Tile.setEnabled(True)
@pyqtSlot() ##级联展开
def on_actMDI_Cascade_triggered(self):
self.ui.mdiArea.cascadeSubWindows()
@pyqtSlot() ##平铺展开
def on_actMDI_Tile_triggered(self):
self.ui.mdiArea.tileSubWindows()
@pyqtSlot() ##密文分析
def on_actCipher_Analyse_triggered(self):
formCipher=QmyCipher(self)
formCipher.setAttribute(Qt.WA_DeleteOnClose)
formCipher.setWindowTitle("密文分析")
formCipher.setWindowIcon(QIcon("./GUI/images/4.png"))
# formCipher.setWindowOpacity(0.9) #透明度
formCipher.show()
@pyqtSlot() ##自动提取flag
def on_actAuto_Flag_triggered(self):
formAbout=QmyGetFlag(self)
formAbout.setAttribute(Qt.WA_DeleteOnClose)
formAbout.setWindowTitle("自动提取flag")
formAbout.setWindowIcon(QIcon("./GUI/images/5.png"))
formAbout.show()
@pyqtSlot() ##插件
def on_actCipher_Plug_triggered(self):
formAbout=QmyAddPlug(self)
formAbout.setAttribute(Qt.WA_DeleteOnClose)
formAbout.setWindowTitle("插件")
formAbout.setWindowIcon(QIcon("./GUI/images/6.png"))
formAbout.show()
@pyqtSlot() ##字体设置
def on_actEdit_Font_triggered(self):
formDoc=self.ui.mdiArea.activeSubWindow().widget()
formDoc.textSetFont()
@pyqtSlot() ##关于
def on_actAbout_triggered(self):
##打开新的GUI页面
formAbout=QmyAbout(self)
formAbout.setAttribute(Qt.WA_DeleteOnClose)
formAbout.setWindowTitle("关于")
formAbout.setWindowIcon(QIcon("./GUI/images/11.png"))
formAbout.show()
@pyqtSlot(type) ##子窗口切换
def on_mdiArea_subWindowActivated(self,arg1):
cnt=len(self.ui.mdiArea.subWindowList())
if (cnt==0):
self.__enableEditActions(False)
self.ui.statusBar.clearMessage()
else:
formDoc=self.ui.mdiArea.activeSubWindow().widget()
self.ui.statusBar.showMessage(formDoc.currentFileName()) #显示子窗口的文件名
if __name__ == "__main__":
app = QApplication(sys.argv)
form=QmyMainWindow()
form.show()
sys.exit(app.exec_())