def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") webView = QWebEngineView(self.centralwidget) webView.setUrl(QUrl("https://github.com/brcontainer/")) webView.setObjectName("webView") self.gridLayout.addWidget(webView, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) statusbar = QStatusBar(MainWindow) statusbar.setObjectName("statusbar") MainWindow.setStatusBar(statusbar) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow)
class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(563, 339) self.widget = QWebEngineView(Dialog) self.widget.setGeometry(QtCore.QRect(10, 60, 531, 251)) self.widget.setObjectName("widget") self.pushButtonGo = QtWidgets.QPushButton(Dialog) self.pushButtonGo.setGeometry(QtCore.QRect(450, 20, 91, 23)) font = QtGui.QFont() font.setPointSize(12) self.pushButtonGo.setFont(font) self.pushButtonGo.setObjectName("pushButtonGo") self.lineEditURL = QtWidgets.QLineEdit(Dialog) self.lineEditURL.setGeometry(QtCore.QRect(100, 20, 331, 21)) font = QtGui.QFont() font.setPointSize(12) self.lineEditURL.setFont(font) self.lineEditURL.setObjectName("lineEditURL") self.label = QtWidgets.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(10, 20, 71, 16)) font = QtGui.QFont() font.setPointSize(12) self.label.setFont(font) self.label.setObjectName("label") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.pushButtonGo.setText(_translate("Dialog", "Go")) self.label.setText(_translate("Dialog", "Enter URL"))
class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(1009, 685) self.pushButtonGo = QtWidgets.QPushButton(Dialog) self.pushButtonGo.setGeometry(QtCore.QRect(560, 580, 75, 23)) self.pushButtonGo.setObjectName("pushButtonGo") self.lineEditURL = QtWidgets.QLineEdit(Dialog) self.lineEditURL.setGeometry(QtCore.QRect(210, 580, 291, 20)) self.lineEditURL.setObjectName("lineEditURL") self.widget = QWebEngineView(Dialog) self.widget.setGeometry(QtCore.QRect(90, 50, 851, 491)) self.widget.setObjectName("widget") self.label = QtWidgets.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(100, 580, 91, 21)) self.label.setObjectName("label") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.pushButtonGo.setText(_translate("Dialog", "Go")) self.label.setText(_translate("Dialog", "Enter URL"))
class Ui_Form(object): def __init__(self, k): config = configparser.ConfigParser() config.read('gameSetting.ini') self.URL = config['BROWSER']['URL' + str(k)] self.gain = config.getfloat('BROWSER', 'gain' + str(k)) self.Dialog = QtWidgets.QDialog() self.setupUi(self.Dialog) def setupUi(self, Form): Form.setObjectName("Form") Form.resize(1300, 800) Form.setMinimumSize(QtCore.QSize(1300, 800)) Form.setMaximumSize(QtCore.QSize(1300, 800)) Form.setMouseTracking(True) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("media/cat.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) Form.setWindowIcon(icon) self.webEngineView = QWebEngineView(Form) self.webEngineView.setGeometry(QtCore.QRect(0, 0, 1300, 800)) self.webEngineView.setMinimumSize(QtCore.QSize(1300, 800)) self.webEngineView.setMaximumSize(QtCore.QSize(1300, 800)) self.webEngineView.setMouseTracking(False) self.webEngineView.setUrl(QtCore.QUrl(self.URL)) self.webEngineView.setZoomFactor(self.gain) self.webEngineView.setObjectName("webEngineView") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "黑猫浏览器"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.qwebengine = QWebEngineView(self.centralwidget) self.qwebengine.setGeometry(QtCore.QRect(10, 30, 451, 321)) self.qwebengine.setAutoFillBackground(False) self.qwebengine.setStyleSheet("background-color: rgb(170, 170, 127);") self.qwebengine.setObjectName("qwebengine") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.undo = QtWidgets.QPushButton(self.centralwidget) self.undo.setObjectName("undo") self.gridLayout.addWidget(self.undo, 3, 0, 1, 1) self.forward = QtWidgets.QPushButton(self.centralwidget) self.forward.setObjectName("forward") self.gridLayout.addWidget(self.forward, 3, 1, 1, 1) self.update = QtWidgets.QPushButton(self.centralwidget) self.update.setObjectName("update") self.gridLayout.addWidget(self.update, 3, 2, 1, 1) self.gridLayout.addWidget(self.update, 3, 2, 1, 1) self.site = QtWidgets.QLineEdit(self.centralwidget) self.site.setObjectName("site") self.gridLayout.addWidget(self.site, 3, 3, 1, 15) self.web = QWebEngineView() self.web.setObjectName("web") self.gridLayout.addWidget(self.web, 4, 0, 155, 18) self.add = QLabel( 'Автору на печеньки: https://yoomoney.ru/to/410018466402473/200') # self.add.enable self.gridLayout.addWidget(self.add, 200, 0, 1, 18) MainWindow.setCentralWidget(self.centralwidget) # self.btn = QPushButton() # self.btn.setObjectName("test") # self.gridLayout.addWidget(self.btn, 0, 0, 1, 1) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle( _translate("MainWindow", "My Browser (pre-alpha edition)")) self.undo.setText(_translate("MainWindow", "<-")) self.forward.setText(_translate("MainWindow", "->")) self.update.setText(_translate("MainWindow", "update"))
class Example(QMainWindow): htmlPath = QDir.current() htmlPath.cd("html") def __init__(self): super().__init__() self.setObjectName('Main') QMetaObject.connectSlotsByName(self) self.view = QWebEngineView() self.view.settings().setAttribute(QWebEngineSettings.LocalStorageEnabled, True) self.view.setObjectName('MapWidget') self.window = QWidget() self.window.setObjectName('MainWidget') self.layout = QGridLayout(self.window) self.layout.addWidget(self.view) self.setCentralWidget(self.window) self.channel = QWebChannel(self.view.page()) self.view.page().setWebChannel(self.channel) self.channel.registerObject("jshelper", self) principal = Figure() js = JavascriptLink(QUrl.fromLocalFile(self.htmlPath.absoluteFilePath("qwebchannel.js")).toString()) principal.header.add_child(Element(js.render())) map = folium.Map(location=[36, -108], zoom_start=5, tiles='StamenWatercolor').add_to(principal) fastestRoute = folium.PolyLine(((40, -110), (50, -110)), weight=5, color='blue').add_to(map) f = Figure() f.html.add_child(Element('<button id="myBtn">Try it</button>')) f.html.add_child(Element('<p>\n TEST \n</p>')) link = JavascriptLink(QUrl.fromLocalFile(self.htmlPath.absoluteFilePath("popup.js")).toString()) f.html.add_child(Element(link.render())) iframe = branca.element.IFrame(html=f.render(), width=500, height=300) popup = folium.Popup(iframe, max_width=500) fastestRoute.add_child(popup) principal.save(self.htmlPath.absoluteFilePath("test.html")) self.view.load(QUrl().fromLocalFile(self.htmlPath.absoluteFilePath("test.html"))) self.setGeometry(100, 100, 1200, 900) self.show() @pyqtSlot(str) def pathSelected(self, lat): print(lat)
class Ui_MainWindow_Ex(Ui_MainWindow): def setupUi(self, MainWindow): super().setupUi(MainWindow) # chrome init self.qwebView = QWebEngineView(self.groupBox_4) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.qwebView.sizePolicy().hasHeightForWidth()) self.qwebView.setSizePolicy(sizePolicy) self.qwebView.setObjectName("qwebView") self.verticalLayout_8.addWidget(self.qwebView) # tabbar init self.tabBar = QTabBar(self.groupBox_6) self.tabBar.setObjectName("tabBar") self.verticalLayout_5.insertWidget(1, self.tabBar)
class BrowserDialog(object): def setupUi(self, Dialog): Dialog.setObjectName(_fromUtf8("Dialog")) Dialog.resize(1024, 768) self.qwebview = QWebEngineView(Dialog) self.qwebview.setGeometry(QtCore.QRect(0, 50, 1020, 711)) self.qwebview.setObjectName(_fromUtf8("kwebview")) self.lineEdit = QtWidgets.QLineEdit(Dialog) self.lineEdit.setGeometry(QtCore.QRect(10, 20, 1000, 25)) self.lineEdit.setObjectName(_fromUtf8("lineEdit")) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): Dialog.setWindowTitle(_translate("Browser", "Browser", None))
class AboutDialog(QtWidgets.QDialog, Ui_Dialog): def __init__(self): super(AboutDialog, self).__init__() self.setupUi(self) self.setFixedSize(501, 371) self.webView = QWebEngineView(self) self.webView.setGeometry(QtCore.QRect(0, 20, 481, 281)) self.webView.setObjectName("webView") filenames = 'README' md.convert(filenames) path = hp.load_file(filenames + '.html') self.webView.load(QUrl.fromLocalFile(path)) self.webView.show() self.setWindowTitle(filenames)
class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(562, 488) self.widget = QWebEngineView(Dialog) self.widget.setGeometry(QtCore.QRect(10, 160, 531, 301)) self.widget.setObjectName("widget") self.pushButtonShowMap = QtWidgets.QPushButton(Dialog) self.pushButtonShowMap.setGeometry(QtCore.QRect(210, 110, 101, 31)) font = QtGui.QFont() font.setPointSize(12) self.pushButtonShowMap.setFont(font) self.pushButtonShowMap.setObjectName("pushButtonShowMap") self.lineEditLongitude = QtWidgets.QLineEdit(Dialog) self.lineEditLongitude.setGeometry(QtCore.QRect(100, 20, 331, 21)) font = QtGui.QFont() font.setPointSize(12) self.lineEditLongitude.setFont(font) self.lineEditLongitude.setObjectName("lineEditLongitude") self.label = QtWidgets.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(10, 20, 71, 21)) font = QtGui.QFont() font.setPointSize(12) self.label.setFont(font) self.label.setObjectName("label") self.lineEditLatitude = QtWidgets.QLineEdit(Dialog) self.lineEditLatitude.setGeometry(QtCore.QRect(100, 60, 331, 21)) font = QtGui.QFont() font.setPointSize(12) self.lineEditLatitude.setFont(font) self.lineEditLatitude.setObjectName("lineEditLatitude") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setGeometry(QtCore.QRect(20, 60, 71, 21)) font = QtGui.QFont() font.setPointSize(12) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.pushButtonShowMap.setText(_translate("Dialog", "Show Map")) self.label.setText(_translate("Dialog", "Longitude")) self.label_2.setText(_translate("Dialog", "Latitude"))
class Ui_webDialog(object): def __init__(self, webDialog): webDialog.setObjectName("webDialog") webDialog.resize(721, 571) self.gridLayout = QtWidgets.QGridLayout(webDialog) self.gridLayout.setObjectName("gridLayout") self.webBrowser = QWebEngineView(webDialog) self.webBrowser.setUrl(QtCore.QUrl("about:blank")) self.webBrowser.setObjectName("webBrowser") self.gridLayout.addWidget(self.webBrowser, 0, 0, 1, 1) self.retranslateUi(webDialog) QtCore.QMetaObject.connectSlotsByName(webDialog) def retranslateUi(self, webDialog): _translate = QtCore.QCoreApplication.translate webDialog.setWindowTitle(_translate("webDialog", "Browser"))
class Ui_BTC_LiveGraph(object): def setupUi(self, widget): self.mypath = os.path.dirname(__file__) widget.setObjectName("BTC_LiveGraph") widget.resize(1600, 900) widget.setAccessibleDescription("") self.htmlreader_BTCLiveGraph = QWebEngineView(widget) self.htmlreader_BTCLiveGraph.setGeometry(QRect(10, 10, 1500, 800)) self.htmlreader_BTCLiveGraph.setAccessibleDescription("") self.htmlreader_BTCLiveGraph.setObjectName("htmlreader_BTCLiveGraph") self.retranslateUi(widget) QMetaObject.connectSlotsByName(widget) def retranslateUi(self, widget): _translate = QCoreApplication.translate widget.setWindowTitle(_translate("BTC_LiveGraph", "BTC Live Graph"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setGeometry(QtCore.QRect(44, 130, 141, 101)) self.pushButton_2.setObjectName("pushButton_2") self.toolBox = QtWidgets.QToolBox(self.centralwidget) self.toolBox.setGeometry(QtCore.QRect(70, 300, 68, 130)) self.toolBox.setObjectName("toolBox") self.page = QtWidgets.QWidget() self.page.setGeometry(QtCore.QRect(0, 0, 68, 68)) self.page.setObjectName("page") self.toolBox.addItem(self.page, "") self.page_2 = QtWidgets.QWidget() self.page_2.setGeometry(QtCore.QRect(0, 0, 68, 68)) self.page_2.setObjectName("page_2") self.toolBox.addItem(self.page_2, "") self.webView = QWebEngineView(self.centralwidget) self.webView.setGeometry(QtCore.QRect(239, 40, 481, 381)) self.webView.setUrl(QtCore.QUrl("https://www.baidu.com/")) self.webView.setObjectName("webView") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.toolBox.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton_2.setText(_translate("MainWindow", "PushButton")) self.toolBox.setItemText(self.toolBox.indexOf(self.page), _translate("MainWindow", "Page 1")) self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), _translate("MainWindow", "Page 2"))
class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(728, 480) self.horizontalLayout = QtWidgets.QHBoxLayout(Form) self.horizontalLayout.setObjectName("horizontalLayout") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.label = QtWidgets.QPlainTextEdit(Form) self.label.setMinimumSize(QtCore.QSize(80, 0)) self.label.setReadOnly(True) self.label.appendPlainText("") self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setObjectName("pushButton") self.pushButton1 = QtWidgets.QPushButton(Form) self.pushButton1.setObjectName("pushButton1") self.lineEdit = QtWidgets.QLineEdit(Form) self.lineEdit.setMinimumSize(QtCore.QSize(80, 0)) self.lineEdit.setObjectName("lineEdit") self.verticalLayout.addWidget(self.lineEdit) self.verticalLayout.addWidget(self.pushButton) self.verticalLayout.addWidget(self.pushButton1) self.horizontalLayout.addLayout(self.verticalLayout) self.webView = QWebEngineView(Form) #self.webView.setUrl(QtCore.QUrl("about:blank")) self.webView.setObjectName("webView") self.webView.setMinimumSize(QtCore.QSize(500, 0)) self.horizontalLayout.addWidget(self.webView) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "web")) self.pushButton.setText(_translate("Form", "发送(run js)")) self.pushButton1.setText(_translate("Form", "发送(信号槽)"))
class Ui_Force(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1200, 900) MainWindow.setAutoFillBackground(False) MainWindow.setStyleSheet("background-color: rgb(15, 45, 80);\n" "QPushButton { color: red }\n" "QLineEdit { color: red }\n" "QComboBox { color: red }\n" "") MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon) MainWindow.setAnimated(True) MainWindow.setDockNestingEnabled(True) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalScrollBar = QtWidgets.QScrollBar(self.centralwidget) self.horizontalScrollBar.setGeometry(QtCore.QRect(-10, 540, 761, 20)) self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal) self.horizontalScrollBar.setObjectName("horizontalScrollBar") self.label_7 = QtWidgets.QLabel(self.centralwidget) self.label_7.setGeometry(QtCore.QRect(380, 480, 50, 51)) font = QtGui.QFont() font.setKerning(True) self.label_7.setFont(font) self.label_7.setAutoFillBackground(False) self.label_7.setFrameShape(QtWidgets.QFrame.NoFrame) self.label_7.setText("") self.label_7.setPixmap( QtGui.QPixmap("../../Blockchain_Schedule/Logos/circle2.png")) self.label_7.setScaledContents(True) self.label_7.setObjectName("label_7") self.progressBar = QtWidgets.QProgressBar(self.centralwidget) self.progressBar.setGeometry(QtCore.QRect(340, 450, 118, 23)) self.progressBar.setProperty("value", 41) self.progressBar.setObjectName("progressBar") self.groupBox_4 = QtWidgets.QGroupBox(self.centralwidget) self.groupBox_4.setGeometry(QtCore.QRect(40, 10, 1000, 750)) self.groupBox_4.setObjectName("groupBox_4") self.webEngineView = QWebEngineView(self.groupBox_4) self.webEngineView.setGeometry(QtCore.QRect(20, 30, 900, 700)) self.webEngineView.setUrl( QtCore.QUrl( "http://blockchainforprojects.com/wp-content/uploads/2018/11/Off_Plat.html" )) self.webEngineView.setObjectName("webEngineView") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 762, 22)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.dockWidget = QtWidgets.QDockWidget(MainWindow) self.dockWidget.setObjectName("dockWidget") self.dockWidgetContents = QtWidgets.QWidget() self.dockWidgetContents.setObjectName("dockWidgetContents") self.dockWidget.setWidget(self.dockWidgetContents) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.dockWidget) self.actionOpen_unsubmitted_Transaction = QtWidgets.QAction(MainWindow) self.actionOpen_unsubmitted_Transaction.setObjectName( "actionOpen_unsubmitted_Transaction") self.actionNew_Transaction = QtWidgets.QAction(MainWindow) self.actionNew_Transaction.setObjectName("actionNew_Transaction") self.menuFile.addAction(self.actionOpen_unsubmitted_Transaction) self.menuFile.addAction(self.actionNew_Transaction) self.menubar.addAction(self.menuFile.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) #target_url = "http://www.google.com") #data = urllib2.urlopen(target_url) # it's a file like object and works just like a file #for line in data: # files are iterable #print line #data = urllib2.urlopen("http://www.google.com").read(20000) # read only 20 000 chars #data = data.split("\n") # then split it into lines #for line in data: #print(line) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Project Network")) self.groupBox_4.setTitle(_translate("MainWindow", "GroupBox")) self.menuFile.setTitle(_translate("MainWindow", "File")) self.actionOpen_unsubmitted_Transaction.setText( _translate("MainWindow", "Open unsubmitted Transaction")) self.actionNew_Transaction.setText( _translate("MainWindow", "New Transaction"))
class Ui_MainWindow(QMainWindow): def setupUi(self, MainWindow): self.setWindowIcon(QtGui.QIcon('starbucks_icon.jpg')) self.menubar = QtWidgets.QMenuBar(self) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") self.menu = QtWidgets.QMenu(self.menubar) self.menu.setObjectName("menu") self.menu_2 = QtWidgets.QMenu(self.menubar) self.menu_2.setObjectName("menu_2") self.menu_3 = QtWidgets.QMenu(self.menubar) self.menu_3.setObjectName("menu_3") self.setMenuBar(self.menubar) self.shiqu = QtWidgets.QAction(self) self.shiqu.setObjectName("shiqu") self.shiquerji = QtWidgets.QAction(self) self.shiquerji.setObjectName("shiquerji") self.zhuzhuang = QtWidgets.QAction(self) self.zhuzhuang.setObjectName("zhuzhuang") self.bingtu = QtWidgets.QAction(self) self.bingtu.setObjectName("bingtu") self.fenbu = QtWidgets.QAction(self) self.fenbu.setObjectName("fenbu") self.shiqufenbu = QtWidgets.QAction(self) self.shiqufenbu.setObjectName("shiqufenbu") self.guojiajianbian = QtWidgets.QAction(self) self.guojiajianbian.setObjectName("guojiajianbian") self.menu.addAction(self.shiqu) self.menu.addAction(self.shiquerji) self.menu_2.addAction(self.zhuzhuang) self.menu_2.addAction(self.bingtu) self.menu_3.addAction(self.fenbu) self.menu_3.addAction(self.shiqufenbu) self.menu_3.addAction(self.guojiajianbian) self.menubar.addAction(self.menu.menuAction()) self.menubar.addAction(self.menu_2.menuAction()) self.menubar.addAction(self.menu_3.menuAction()) self.listWidget = QtWidgets.QListWidget() self.listWidget.setFixedSize(200, 500) self.listWidget.setObjectName("listView") self.listWidget.close() self.set_topk() self.set_topr() self.set_score() self.set_webwindow() vbox = QtWidgets.QGridLayout() self.two = QtWidgets.QWidget() hbox = QtWidgets.QHBoxLayout() hbox.addWidget(self.topk) hbox.addWidget(self.topr) hbox.addWidget(self.score) self.two.setLayout(hbox) self.three = QtWidgets.QWidget() hbox_three = QtWidgets.QHBoxLayout() hbox_three.addWidget(self.web) hbox_three.addWidget(self.listWidget) self.listWidget.close() self.three.setLayout(hbox_three) vbox.addWidget(self.two) vbox.addWidget(self.three) self.main = QtWidgets.QWidget() self.resize(1600, 700) self.main.setLayout(vbox) self.setCentralWidget(self.main) self.retranslateUi(MainWindow) self.search_k.clicked.connect(self.search_kfun) self.shiqu.triggered.connect(self.shiqufun) self.shiquerji.triggered.connect(self.shiquerjifun) self.zhuzhuang.triggered.connect(self.zhuzhuangfun) self.bingtu.triggered.connect(self.bingtufun) self.guojiajianbian.triggered.connect(self.guojiajianbianfun) self.fenbu.triggered.connect(self.fenbufun) self.shiqufenbu.triggered.connect(self.shiqufenbufun) self.time_analysis.clicked.connect(self.time_analysisfun) self.search_r.clicked.connect(self.search_rfun) QtCore.QMetaObject.connectSlotsByName(MainWindow) MainWindow.show() self.listWidget.close() def set_topk(self): self.topk = QtWidgets.QGroupBox("关键词检索") self.topk.setObjectName("topk") hbox = QtWidgets.QHBoxLayout() self.key = QtWidgets.QComboBox(self.topk) self.key.setObjectName("key") self.key.addItem("") self.key.addItem("Brand") self.key.addItem("Store Number") self.key.addItem("Store Name") self.key.addItem("Ownership Type") self.key.addItem("Street Address") self.key.addItem("City") self.key.addItem("State/Province") self.key.addItem("Country") self.key.addItem("Postcode") self.key.addItem("Phone Number") self.key.addItem("Timezone") self.keyword_text = "" self.key.activated[str].connect(self.keyword_onActivated) self.keyword = QtWidgets.QLineEdit(self.topk) self.keyword.setObjectName("keyword") self.keyword.setFixedWidth(60) self.label_k = QtWidgets.QLabel(self.topk) self.label_k.setObjectName("label_k") self.input_k = QtWidgets.QLineEdit(self.topk) self.input_k.setObjectName("input_k") self.label_lonk = QtWidgets.QLabel(self.topk) self.label_lonk.setObjectName("label") self.label_latk = QtWidgets.QLabel(self.topk) self.label_latk.setObjectName("label_latk") self.search_k = QtWidgets.QPushButton(self.topk) self.search_k.setObjectName("search_k") self.search_k.setFixedWidth(60) self.input_lat = QtWidgets.QLineEdit(self.topk) self.input_lat.setObjectName("input_lat") self.input_lat.setFixedWidth(50) self.input_lon = QtWidgets.QLineEdit(self.topk) self.input_lon.setObjectName("input_lon") self.input_lon.setFixedWidth(50) self.time_analysis = QtWidgets.QPushButton(self.topk) self.time_analysis.setObjectName("time_analysis") self.time_analysis.setFixedWidth(100) hbox.addWidget(self.key) hbox.addWidget(self.keyword) hbox.addWidget(self.label_lonk) hbox.addWidget(self.input_lon) hbox.addWidget(self.label_latk) hbox.addWidget(self.input_lat) hbox.addWidget(self.label_k) hbox.addWidget(self.input_k) hbox.addWidget(self.search_k) hbox.addWidget(self.time_analysis) self.topk.setLayout(hbox) def set_topr(self): hbox_r = QtWidgets.QHBoxLayout() self.topr = QtWidgets.QGroupBox("距离范围检索") self.topr.setObjectName("topr") self.label_lonr = QtWidgets.QLabel(self.topr) self.label_lonr.setObjectName("lonr") self.label_latr = QtWidgets.QLabel(self.topr) self.label_latr.setObjectName("label_latr") self.search_r = QtWidgets.QPushButton(self.topr) self.search_r.setObjectName("search_r") self.input_lat_r = QtWidgets.QLineEdit(self.topr) self.input_lat_r.setObjectName("input_lat_r") self.input_lat_r.setFixedWidth(50) self.input_lon_r = QtWidgets.QLineEdit(self.topr) self.input_lon_r.setObjectName("input_lon_r") self.input_lon_r.setFixedWidth(50) self.input_r = QtWidgets.QLineEdit(self.topr) self.input_r.setObjectName("input_r") self.rsearch = QtWidgets.QLabel(self.topr) self.rsearch.setObjectName("rsearch") hbox_r.addWidget(self.label_lonr) hbox_r.addWidget(self.input_lon_r) hbox_r.addWidget(self.label_latr) hbox_r.addWidget(self.input_lat_r) hbox_r.addWidget(self.rsearch) hbox_r.addWidget(self.input_r) hbox_r.addWidget(self.search_r) self.topr.setLayout(hbox_r) def set_score(self): hbox_s = QtWidgets.QHBoxLayout() self.score = QtWidgets.QGroupBox("评分") self.score.setObjectName("score") self.label_score = QtWidgets.QLabel(self.score) self.label_score.setObjectName("label_score") self.countSpineBox = QtWidgets.QSpinBox() self.countSpineBox.setRange(0, 10) self.countSpineBox.setEnabled(False) self.in_score = QtWidgets.QPushButton(self.score) self.in_score.setObjectName("in_score") self.in_score.setEnabled(False) hbox_s.addWidget(self.label_score) hbox_s.addWidget(self.countSpineBox) hbox_s.addWidget(self.in_score) self.score.setLayout(hbox_s) def set_webwindow(self): self.web = QtWidgets.QGroupBox("显示结果") hbox_web = QtWidgets.QHBoxLayout() self.webwindow = QWebEngineView() self.webwindow.setAutoFillBackground(True) self.webwindow.setObjectName("webwindow") hbox_web.addWidget(self.webwindow) self.web.setLayout(hbox_web) def search_kfun(self): input_attr = self.keyword.text() input_lon = float(self.input_lon.text()) input_lat = float(self.input_lat.text()) input_k = int(self.input_k.text()) starbucks_df = read_data() start = time.time() df_find = find_same(starbucks_df, self.keyword_text.decode(encoding="utf-8"), input_attr) df_find = preprocessing(df_find) df_temp = topk(df_find, input_lon, input_lat, input_k) end = time.time() run_time = end - start self.statusBar().showMessage('查询时间为: ' + str(run_time)) draw_map(df_temp, "simtopk.html") k_analysis = topk_k_analysis(df_find, input_lon, input_lat) bar_time = Bar("该经纬度下topk计算时间随k变化") bar_pic(bar_time, k_analysis, 'k', 'time', 'k时间顺序') bar_time.render(r'time_analysis.html') path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/simtopk.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.clear() for i in range(df_temp.shape[0]): item = QtWidgets.QListWidgetItem(df_temp['Store Name'][i]) self.listWidget.addItem(item) self.listWidget.show() self.listWidget.itemClicked['QListWidgetItem*'].connect(self.dia) def dia(self): self.countSpineBox.setEnabled(True) self.in_score.setEnabled(True) self.in_score.clicked.connect(self.pingfen) def pingfen(self): score_var = int(self.countSpineBox.text()) starbucks_df = read_data() starbucks_df = input_score(starbucks_df, score_var, self.listWidget.currentItem().text()) starbucks_df.to_csv('starbucks.csv', encoding="utf_8_sig", index=False) def keyword_onActivated(self, text): self.keyword_text = text.encode("utf-8") def search_rfun(self): lon_r_text = float(self.input_lon_r.text()) lat_r_text = float(self.input_lat_r.text()) r_text = int(self.input_r.text()) starbucks_df = read_data() df_find = preprocessing(starbucks_df) df_temp = r_cal(df_find, lon_r_text, lat_r_text, r_text) df_temp = df_temp.reset_index(drop=False) draw_map(df_temp, "range.html") path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/range.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.clear() for i in range(df_temp.shape[0]): item = QtWidgets.QListWidgetItem(df_temp['Store Name'][i]) self.listWidget.addItem(item) self.listWidget.show() self.listWidget.itemClicked['QListWidgetItem*'].connect(self.dia) def time_analysisfun(self): path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/time_analysis.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def shiqufun(self): # 时区图 path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/Amout_in_Each_Timezone_Pie.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def shiquerjifun(self): # 时区二级图 path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/Amount_of_Country_in_Timezone_Pie.html' self.webwindow.load(QtCore.QUrl(url)) # self.setCentralWidget(self.webwindow) self.webwindow.show() self.listWidget.close() def shiqujianbianfun(self): path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/map_time.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def zhuzhuangfun(self): # 柱状图 path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/Amount_Each_Country_Bar.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def bingtufun(self): # 饼状图 path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/Amount_Each_Country_Pie.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def fenbufun(self): # 店铺分布图 path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/fenbutu.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def shiqufenbufun(self): # 店铺时区分布图 path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/map_time.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def guojiajianbianfun(self): path = os.getcwd() url = pathname2url(path) url = 'file:' + url + '/distribution_map_country.html' self.webwindow.load(QtCore.QUrl(url)) self.webwindow.show() self.listWidget.close() def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label_k.setText(_translate("MainWindow", "结果数:")) self.label_lonk.setText(_translate("MainWindow", "经度:")) self.label_latk.setText(_translate("MainWindow", "纬度:")) self.search_k.setText(_translate("MainWindow", "查询")) self.time_analysis.setText(_translate("MainWindow", "查询时间分析")) self.label_lonr.setText(_translate("MainWindow", "经度:")) self.label_latr.setText(_translate("MainWindow", "纬度:")) self.search_r.setText(_translate("MainWindow", "查询")) self.rsearch.setText(_translate("MainWindow", "距离范围(米):")) self.label_score.setText(_translate("MainWindow", "输入分数(1-10):")) self.in_score.setText(_translate("MainWindow", "评分")) self.menu.setTitle(_translate("MainWindow", "按时区数据统计")) self.menu_2.setTitle(_translate("MainWindow", "按国家数据统计")) self.menu_3.setTitle(_translate("MainWindow", "分布地图")) self.shiqu.setText(_translate("MainWindow", "各时区店铺数量统计饼图")) self.shiquerji.setText(_translate("MainWindow", "各时区店铺数量统计饼图(详细)")) self.zhuzhuang.setText(_translate("MainWindow", "柱状图")) self.bingtu.setText(_translate("MainWindow", "饼图")) self.guojiajianbian.setText(_translate("MainWindow", "各国家店铺数量渐变图")) self.fenbu.setText(_translate("MainWindow", "店铺分布图")) self.shiqufenbu.setText(_translate("MainWindow", "时区店铺分布图"))
class Ui_Form(object): def setupUi(self, Form): self.path = './graph/monthtype.html' Form.setObjectName("Form") self.setWindowIcon(QIcon('douyin.png')) Form.resize(905, 700) self.widget = QWebEngineView(self) # 原来的self.widget.setGeometry(QtCore.QRect(0, 88, 910, 650)) self.widget.setGeometry(QtCore.QRect(-9, 90, 927, 635)) #h=644 y=90 self.widget.setObjectName("widget") font = QtGui.QFont() font.setFamily("幼圆") font.setPointSize(10) self.comboBox_2 = QtWidgets.QComboBox(Form) self.comboBox_2.setGeometry(QtCore.QRect(130, 20, 111, 49)) self.comboBox_2.setObjectName("comboBox_2") self.comboBox_2.setFont(font) self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(49, 20, 69, 41)) font = QtGui.QFont() font.setFamily("幼圆") font.setPointSize(18) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.comboBox_4 = QtWidgets.QComboBox(Form) self.comboBox_4.setGeometry(QtCore.QRect(338, 20, 92, 49)) self.comboBox_4.setObjectName("comboBox_4") font.setFamily("幼圆") font.setPointSize(11) self.comboBox_4.setFont(font) self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.comboBox_4.addItem("") self.label_4 = QtWidgets.QLabel(Form) self.label_4.setGeometry(QtCore.QRect(262, 20, 69, 41)) font = QtGui.QFont() font.setFamily("幼圆") font.setPointSize(18) self.label_4.setFont(font) self.label_4.setObjectName("label_4") self.radioButton = QtWidgets.QRadioButton(Form) self.radioButton.setGeometry(QtCore.QRect(462, 21, 125, 41)) font = QtGui.QFont() font.setFamily("Yu Gothic UI Semilight") font.setPointSize(10) self.radioButton.setFont(font) self.radioButton.setObjectName("radioButton") self.checkBox = QtWidgets.QCheckBox(Form) self.checkBox.setGeometry(QtCore.QRect(692, 21, 133, 41)) font = QtGui.QFont() font.setFamily("Yu Gothic UI Semilight") font.setPointSize(10) self.checkBox.setFont(font) self.checkBox.setObjectName("checkBox") #美化 self.meihuabt1 = QtWidgets.QPushButton(Form) self.meihuabt1.setGeometry(QtCore.QRect(4, 2, 14, 14)) self.meihuabt1.setText("") self.meihuabt1.setObjectName("meihuabt1") self.meihuabt2 = QtWidgets.QPushButton(Form) self.meihuabt2.setGeometry(QtCore.QRect(32, 2, 14, 14)) self.meihuabt2.setText("") self.meihuabt2.setObjectName("meihuabt2") self.meihuabt3 = QtWidgets.QPushButton(Form) self.meihuabt3.setGeometry(QtCore.QRect(60, 2, 14, 14)) self.meihuabt3.setText("") self.meihuabt3.setObjectName("meihuabt3") self.meihuabt1.setStyleSheet( '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''' ) self.meihuabt2.setStyleSheet( '''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''' ) self.meihuabt3.setStyleSheet( '''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''' ) Form.setWindowOpacity(0.96) Form.setWindowFlag(QtCore.Qt.FramelessWindowHint) Form.setStyleSheet('''background-color:#FFF0F50 ;''') self.meihuabt3.clicked.connect(self.close) self.meihuabt1.clicked.connect(self.showMinimized) self.radioButton.toggled.connect(self.display) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "电影词云")) self.comboBox_2.setItemText(0, _translate("Form", "所有年份")) self.comboBox_2.setItemText(1, _translate("Form", " 2018")) self.comboBox_2.setItemText(2, _translate("Form", " 2017")) self.comboBox_2.setItemText(3, _translate("Form", " 2016")) self.comboBox_2.setItemText(4, _translate("Form", " 2015")) self.label_2.setText(_translate("Form", "年份")) self.comboBox_4.setItemText(0, _translate("Form", " 1")) self.comboBox_4.setItemText(1, _translate("Form", " 2")) self.comboBox_4.setItemText(2, _translate("Form", " 3")) self.comboBox_4.setItemText(3, _translate("Form", " 4")) self.comboBox_4.setItemText(4, _translate("Form", " 5")) self.comboBox_4.setItemText(5, _translate("Form", " 6")) self.comboBox_4.setItemText(6, _translate("Form", " 7")) self.comboBox_4.setItemText(7, _translate("Form", " 8")) self.comboBox_4.setItemText(8, _translate("Form", " 9")) self.comboBox_4.setItemText(9, _translate("Form", " 10")) self.comboBox_4.setItemText(10, _translate("Form", " 11")) self.comboBox_4.setItemText(11, _translate("Form", " 12")) self.label_4.setText(_translate("Form", "月份")) self.radioButton.setText(_translate("Form", "WATCH ME")) self.checkBox.setText(_translate("Form", "KEEP IT?")) def display(self): self.radioButton.setChecked(True) conn = pymysql.connect(host='127.0.0.1', user='******', passwd='714511', db='qinwenrui', port=3306, charset='utf8mb4') year = self.comboBox_2.currentText().replace(' ', '') month = self.comboBox_4.currentText().replace(' ', '') #输入 sql = 'SELECT * FROM `dianying`;' df = pd.read_sql(sql, conn) if year != '所有年份': a = df[(df.年份 == year) & (df.月份 == int(month))] else: a = df[(df.月份 == int(month))] M = [] TYPE = a[['题材', '票房']] c = TYPE[(TYPE.题材 == '犯罪')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '喜剧')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '剧情')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '纪录片')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '奇幻')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '动作')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '冒险')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '悬疑')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '动画')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '战争')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '家庭')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '科幻')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) c = TYPE[(TYPE.题材 == '历史')] money = 0 for k in c.index.tolist(): money = money + c.loc[k].values[1] M.append(money) #TYPE.loc[rows]获取信息 tp = [ '犯罪', '喜剧', '剧情', '纪录片', '奇幻', '动作', '冒险', '悬疑', '动画', '战争', '家庭', '科幻', '历史' ] pie = Pie('{}年{}月题材票房占比'.format(year, month), title_pos='center', width=907, height=619) #h=625 pie._option['animation'] = False pie.use_theme('dark') pie.add('', tp, M, center=[50, 50], radius=[0, 60], is_label_show=True, legend_orient='vertical', legend_pos='left') pie.render('./graph/monthtype.html') self.widget.load(QUrl.fromLocalFile('/graph/monthtype.html'))
class BigReport(QMdiSubWindow, form_BigReport.Ui_frmBigReport): # create "resized" as a signal that the window can emit # we respond to this signal with the form's resizeMe method below resized = pyqtSignal() def __init__(self): super(self.__class__, self).__init__() self.setupUi(self) self.mdiParent = "" self.myHtml = "" self.resized.connect(self.resizeMe) self.lstDates.currentRowChanged.connect(self.FillSpeciesForDate) self.lstLocations.currentRowChanged.connect( self.FillSpeciesForLocation) self.lstLocations.doubleClicked.connect( lambda: self.CreateLocation(self.lstLocations)) self.tblNewLocationSpecies.itemDoubleClicked.connect( lambda: self.CreateLocation(self.tblNewLocationSpecies)) self.lstDates.doubleClicked.connect( lambda: self.CreateSpeciesList(self.lstDates)) self.lstSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.lstSpecies)) self.lstLocationSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.lstLocationSpecies)) self.lstLocationUniqueSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.lstLocationUniqueSpecies)) self.lstNewLifeSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.lstNewLifeSpecies)) self.tblNewYearSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.tblNewYearSpecies)) self.tblNewMonthSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.tblNewMonthSpecies)) self.tblNewCountrySpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.tblNewCountrySpecies)) self.tblNewStateSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.tblNewStateSpecies)) self.tblNewCountySpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.tblNewCountySpecies)) self.tblNewLocationSpecies.doubleClicked.connect( lambda: self.CreateIndividual(self.tblNewLocationSpecies)) self.tblSpecies.doubleClicked.connect(self.TblSpeciesClicked) # right-click menu actions to widgets as appropriate self.tblSpecies.addAction(self.actionSetSpeciesFilter) self.tblSpecies.addAction(self.actionSetFirstDateFilter) self.tblSpecies.addAction(self.actionSetLastDateFilter) self.lstLocations.addAction(self.actionSetLocationFilter) self.lstDates.addAction(self.actionSetDateFilter) self.lstSpecies.addAction(self.actionSetSpeciesFilter) self.lstLocationSpecies.addAction(self.actionSetSpeciesFilter) self.lstLocationUniqueSpecies.addAction(self.actionSetSpeciesFilter) self.lstNewLifeSpecies.addAction(self.actionSetSpeciesFilter) self.tblNewYearSpecies.addAction(self.actionSetSpeciesFilter) self.tblNewYearSpecies.addAction(self.actionSetDateFilterToYear) self.tblNewMonthSpecies.addAction(self.actionSetSpeciesFilter) self.tblNewMonthSpecies.addAction(self.actionSetDateFilterToMonth) self.tblNewCountrySpecies.addAction(self.actionSetSpeciesFilter) self.tblNewCountrySpecies.addAction(self.actionSetLocationFilter) self.tblNewStateSpecies.addAction(self.actionSetSpeciesFilter) self.tblNewStateSpecies.addAction(self.actionSetLocationFilter) self.tblNewCountySpecies.addAction(self.actionSetSpeciesFilter) self.tblNewCountySpecies.addAction(self.actionSetLocationFilter) self.tblNewLocationSpecies.addAction(self.actionSetSpeciesFilter) self.tblNewLocationSpecies.addAction(self.actionSetLocationFilter) # connect right-click actions to methods self.actionSetDateFilter.triggered.connect(self.setDateFilter) self.actionSetFirstDateFilter.triggered.connect( self.setFirstDateFilter) self.actionSetLastDateFilter.triggered.connect(self.setLastDateFilter) self.actionSetSpeciesFilter.triggered.connect(self.setSpeciesFilter) self.actionSetCountryFilter.triggered.connect(self.setLocationFilter) self.actionSetStateFilter.triggered.connect(self.setLocationFilter) self.actionSetCountyFilter.triggered.connect(self.setLocationFilter) self.actionSetLocationFilter.triggered.connect(self.setLocationFilter) self.actionSetDateFilterToYear.triggered.connect(self.setDateFilter) self.actionSetDateFilterToMonth.triggered.connect(self.setDateFilter) self.webMap = QWebEngineView(self.tabMap) self.webMap.setUrl(QUrl("about:blank")) self.webMap.setObjectName("webMap") self.tabAnalysis.setCurrentIndex(0) self.speciesList = [] self.filter = code_Filter.Filter() self.filteredSightingList = [] def CreateLocation(self, callingWidget): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) if callingWidget.objectName() == "lstLocations": locationName = callingWidget.currentItem().text() if callingWidget.objectName() == "tblNewLocationSpecies": locationName = callingWidget.item(callingWidget.currentRow(), 0).text() if callingWidget.currentColumn() != 0: QApplication.restoreOverrideCursor() return sub = code_Location.Location() sub.mdiParent = self.mdiParent sub.FillLocation(locationName) self.parent().parent().addSubWindow(sub) self.mdiParent.PositionChildWindow(sub, self) sub.show() QApplication.restoreOverrideCursor() def CreateIndividual(self, callingWidget): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) if callingWidget.objectName() in ([ "lstSpecies", "lstLocationSpecies", "lstLocationUniqueSpecies", "lstNewLifeSpecies" ]): species = callingWidget.currentItem().text() if callingWidget.objectName() in ([ "tblNewYearSpecies", "tblNewMonthSpecies", "tblNewCountrySpecies", "tblNewStateSpecies", "tblNewCountySpecies", "tblNewLocationSpecies" ]): species = callingWidget.item(callingWidget.currentRow(), 1).text() if callingWidget.currentColumn() != 1: QApplication.restoreOverrideCursor() return sub = code_Individual.Individual() sub.mdiParent = self.mdiParent sub.FillIndividual(species) self.parent().parent().addSubWindow(sub) self.mdiParent.PositionChildWindow(sub, self) sub.show() sub.resizeMe() QApplication.restoreOverrideCursor() def CreateSpeciesList(self, callingWidget): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) if callingWidget.objectName() == "lstDates": date = callingWidget.currentItem().text() filter = code_Filter.Filter() filter.setStartDate(date) filter.setEndDate(date) sub = code_Lists.Lists() sub.mdiParent = self.mdiParent sub.FillSpecies(filter) self.parent().parent().addSubWindow(sub) self.mdiParent.PositionChildWindow(sub, self) sub.show() QApplication.restoreOverrideCursor() def FillAnalysisReport(self, filter): # save filter for later use self.filter = filter # create subset of master sightings list for this filter self.filteredSightingList = deepcopy( self.mdiParent.db.GetSightings(filter)) filteredSightingList = self.filteredSightingList # ****Setup Species page**** # get species and first/last date data from db speciesListWithDates = self.mdiParent.db.GetSpeciesWithData( filter, self.filteredSightingList, "Subspecies") # abort if filter produced no sightings if len(speciesListWithDates) == 0: return (False) # set up tblSpecies column headers and widths self.tblSpecies.setColumnCount(4) self.tblSpecies.setRowCount(len(speciesListWithDates)) self.tblSpecies.horizontalHeader().setVisible(True) self.tblSpecies.setHorizontalHeaderLabels( ['Tax', 'Species', 'First', 'Last']) header = self.tblSpecies.horizontalHeader() header.setSectionResizeMode(1, QHeaderView.Stretch) self.tblSpecies.setShowGrid(False) # add species and dates to table row by row R = 0 for species in speciesListWithDates: taxItem = QTableWidgetItem() taxItem.setData(Qt.DisplayRole, R + 1) speciesItem = QTableWidgetItem() speciesItem.setText(species[0]) speciesItem.setData(Qt.UserRole, QVariant(species[4])) firstDateItem = QTableWidgetItem() firstDateItem.setData(Qt.DisplayRole, species[1]) lastDateItem = QTableWidgetItem() lastDateItem.setData(Qt.DisplayRole, species[2]) self.tblSpecies.setItem(R, 0, taxItem) self.tblSpecies.setItem(R, 1, speciesItem) self.tblSpecies.setItem(R, 2, firstDateItem) self.tblSpecies.setItem(R, 3, lastDateItem) self.speciesList.append(species[4]) R = R + 1 # ****Setup Dates page**** listDates = self.mdiParent.db.GetDates(filter, filteredSightingList) self.lstDates.addItems(listDates) self.lstDates.setSpacing(2) if len(listDates) > 0: self.lstDates.setCurrentRow(0) self.FillSpeciesForDate() # ****Setup Locations page**** listLocations = self.mdiParent.db.GetLocations(filter, "OnlyLocations", filteredSightingList) for l in listLocations: self.lstLocations.addItem(l) self.lstLocations.setSpacing(2) if len(listLocations) > 0: self.lstLocations.setCurrentRow(0) self.FillSpeciesForLocation() self.lblLocations.setText("Locations (" + str(len(listLocations)) + ")") # ****Setup New Species for Dates page**** speciesListFilter = code_Filter.Filter() speciesListFilter.setSpeciesList(self.speciesList) sightingListForSpeciesSubset = self.mdiParent.db.GetSightings( speciesListFilter) yearSpecies = self.mdiParent.db.GetNewYearSpecies( filter, filteredSightingList, sightingListForSpeciesSubset) lifeSpecies = self.mdiParent.db.GetNewLifeSpecies( filter, filteredSightingList, sightingListForSpeciesSubset) monthSpecies = self.mdiParent.db.GetNewMonthSpecies( filter, filteredSightingList, sightingListForSpeciesSubset) # set up tblNewYearSpecies column headers and widths self.tblNewYearSpecies.setColumnCount(2) self.tblNewYearSpecies.setRowCount(len(yearSpecies) + 1) self.tblNewYearSpecies.horizontalHeader().setVisible(False) header = self.tblNewYearSpecies.horizontalHeader() header.setSectionResizeMode(1, QHeaderView.Stretch) self.tblNewYearSpecies.setShowGrid(False) if len(yearSpecies) > 0: R = 1 for ys in yearSpecies: yearItem = QTableWidgetItem() yearItem.setText(ys[0]) newYearSpeciesItem = QTableWidgetItem() newYearSpeciesItem.setText(ys[1]) self.tblNewYearSpecies.setItem(R, 0, yearItem) self.tblNewYearSpecies.setItem(R, 1, newYearSpeciesItem) R = R + 1 self.tblNewYearSpecies.removeRow(0) self.lblNewYearSpecies.setText("New year species (" + str(len(yearSpecies)) + ")") # set up tblNewMonthSpecies column headers and widths self.tblNewMonthSpecies.setColumnCount(2) self.tblNewMonthSpecies.setRowCount(len(monthSpecies) + 1) self.tblNewMonthSpecies.horizontalHeader().setVisible(False) header = self.tblNewMonthSpecies.horizontalHeader() header.setSectionResizeMode(1, QHeaderView.Stretch) self.tblNewMonthSpecies.setShowGrid(False) if len(monthSpecies) > 0: R = 1 for ms in monthSpecies: monthItem = QTableWidgetItem() monthItem.setText(ms[0]) newMonthSpeciesItem = QTableWidgetItem() newMonthSpeciesItem.setText(ms[1]) self.tblNewMonthSpecies.setItem(R, 0, monthItem) self.tblNewMonthSpecies.setItem(R, 1, newMonthSpeciesItem) R = R + 1 self.tblNewMonthSpecies.removeRow(0) self.lblNewMonthSpecies.setText("New month species (" + str(len(monthSpecies)) + ")") # set up lstNewLifeSpecies if len(lifeSpecies) > 0: self.lstNewLifeSpecies.addItems(lifeSpecies) self.lstNewLifeSpecies.setSpacing(2) self.lblNewLifeSpecies.setText("New life species (" + str(len(lifeSpecies)) + ")") # ****Setup new Location Species page**** countrySpecies = self.mdiParent.db.GetNewCountrySpecies( filter, filteredSightingList, sightingListForSpeciesSubset, self.speciesList) stateSpecies = self.mdiParent.db.GetNewStateSpecies( filter, filteredSightingList, sightingListForSpeciesSubset, self.speciesList) countySpecies = self.mdiParent.db.GetNewCountySpecies( filter, filteredSightingList, sightingListForSpeciesSubset, self.speciesList) locationSpecies = self.mdiParent.db.GetNewLocationSpecies( filter, filteredSightingList, sightingListForSpeciesSubset, self.speciesList) # set up tblNewCountrySpecies column headers and widths self.tblNewCountrySpecies.setColumnCount(2) self.tblNewCountrySpecies.setRowCount(len(countrySpecies)) self.tblNewCountrySpecies.horizontalHeader().setVisible(False) header = self.tblNewCountrySpecies.horizontalHeader() header.setSectionResizeMode(1, QHeaderView.Stretch) self.tblNewCountrySpecies.setShowGrid(False) if len(countrySpecies) > 0: R = 0 for ms in countrySpecies: countryItem = QTableWidgetItem() countryItem.setText(self.mdiParent.db.GetCountryName(ms[0])) newCountrySpeciesItem = QTableWidgetItem() newCountrySpeciesItem.setText(ms[1]) self.tblNewCountrySpecies.setItem(R, 0, countryItem) self.tblNewCountrySpecies.setItem(R, 1, newCountrySpeciesItem) R = R + 1 self.lblNewCountrySpecies.setText("New country species (" + str(len(countrySpecies)) + ")") # set up tblNewStateSpecies column headers and widths self.tblNewStateSpecies.setColumnCount(2) self.tblNewStateSpecies.setRowCount(len(stateSpecies)) self.tblNewStateSpecies.horizontalHeader().setVisible(False) header = self.tblNewStateSpecies.horizontalHeader() header.setSectionResizeMode(1, QHeaderView.Stretch) self.tblNewStateSpecies.setShowGrid(False) if len(stateSpecies) > 0: R = 0 for ms in stateSpecies: stateItem = QTableWidgetItem() stateItem.setText(self.mdiParent.db.GetStateName(ms[0])) newStateSpeciesItem = QTableWidgetItem() newStateSpeciesItem.setText(ms[1]) self.tblNewStateSpecies.setItem(R, 0, stateItem) self.tblNewStateSpecies.setItem(R, 1, newStateSpeciesItem) R = R + 1 self.tblNewStateSpecies.sortByColumn(0, Qt.AscendingOrder) self.lblNewStateSpecies.setText("New state species (" + str(len(stateSpecies)) + ")") # set up tblNewCountySpecies column headers and widths self.tblNewCountySpecies.setColumnCount(2) self.tblNewCountySpecies.setRowCount(len(countySpecies)) self.tblNewCountySpecies.horizontalHeader().setVisible(False) header = self.tblNewCountySpecies.horizontalHeader() header.setSectionResizeMode(1, QHeaderView.Stretch) self.tblNewCountySpecies.setShowGrid(False) if len(countySpecies) > 0: R = 0 for ms in countySpecies: countyItem = QTableWidgetItem() countyItem.setText(ms[0]) newCountySpeciesItem = QTableWidgetItem() newCountySpeciesItem.setText(ms[1]) self.tblNewCountySpecies.setItem(R, 0, countyItem) self.tblNewCountySpecies.setItem(R, 1, newCountySpeciesItem) R = R + 1 self.lblNewCountySpecies.setText("New county species (" + str(len(countySpecies)) + ")") # set up tblNewLocationSpecies column headers and widths self.tblNewLocationSpecies.setColumnCount(2) self.tblNewLocationSpecies.setRowCount(len(locationSpecies)) self.tblNewLocationSpecies.horizontalHeader().setVisible(False) header = self.tblNewLocationSpecies.horizontalHeader() header.setSectionResizeMode(1, QHeaderView.Stretch) self.tblNewLocationSpecies.setShowGrid(False) if len(locationSpecies) > 0: R = 0 for ms in locationSpecies: locationItem = QTableWidgetItem() locationItem.setText(ms[0]) newLocationSpeciesItem = QTableWidgetItem() newLocationSpeciesItem.setText(ms[1]) self.tblNewLocationSpecies.setItem(R, 0, locationItem) self.tblNewLocationSpecies.setItem(R, 1, newLocationSpeciesItem) R = R + 1 self.lblNewLocationSpecies.setText("New location species (" + str(len(locationSpecies)) + ")") # ****Setup window's main labels**** # set main species seen lable text count = self.mdiParent.db.CountSpecies(self.speciesList) self.lblTopSpeciesSeen.setText("Species seen: " + str(count)) # set main location label, using "All Locations" if none others are selected self.mdiParent.SetChildDetailsLabels(self, filter) self.setWindowTitle(self.lblLocation.text() + ": " + self.lblDateRange.text()) if self.lblDetails.text() != "": self.lblDetails.setVisible(True) else: self.lblDetails.setVisible(False) self.resizeMe() self.scaleMe() return (True) def FillSpeciesForDate(self): # create temporary filter for query with nothing but needed date self.lstSpecies.clear() date = self.lstDates.currentItem().text() tempFilter = code_Filter.Filter() tempFilter.setStartDate(date) tempFilter.setEndDate(date) speciesList = self.mdiParent.db.GetSpecies(tempFilter, self.filteredSightingList) self.lstSpecies.addItems(speciesList) self.lstSpecies.setSpacing(2) self.lblSpeciesSeen.setText("Species seen on selected date (" + str(len(speciesList)) + "):") def FillMap(self): coordinatesDict = defaultdict() mapWidth = self.width() - 20 mapHeight = self.height() - self.lblLocation.height() - ( self.lblDateRange.height() * 7.5) self.webMap.setGeometry(5, 5, mapWidth, mapHeight) for l in range(self.lstLocations.count()): locationName = self.lstLocations.item(l).text() coordinates = self.mdiParent.db.GetLocationCoordinates( locationName) coordinatesDict[locationName] = coordinates thisMap = code_MapHtml.MapHtml() thisMap.mapHeight = mapHeight - 20 thisMap.mapWidth = mapWidth - 20 thisMap.coordinatesDict = coordinatesDict # save mapHtml in object's variable so we can reload it later self.mapHtml = thisMap.html() # pass the mapHtml we created to the QWebView widget for display self.webMap.setHtml(self.mapHtml) def FillSpeciesForLocation(self): # create temporary filter for query with nothing but needed location location = self.lstLocations.currentItem().text() tempFilter = code_Filter.Filter() tempFilter.setLocationType("Location") tempFilter.setLocationName(location) speciesList = self.mdiParent.db.GetSpecies(tempFilter, self.filteredSightingList) self.lstLocationSpecies.clear() self.lstLocationSpecies.addItems(speciesList) self.lstLocationSpecies.setSpacing(2) uniqueSpecies = self.mdiParent.db.GetUniqueSpeciesForLocation( self.filter, location, speciesList, self.filteredSightingList) self.lstLocationUniqueSpecies.clear() self.lstLocationUniqueSpecies.addItems(uniqueSpecies) self.lstLocationUniqueSpecies.setSpacing(2) self.lblLocationSpecies.setText("Species at selected location (" + str(len(speciesList)) + ")") self.lblLocationUniqueSpecies.setText( "Species seen ONLY at selected location (" + str(len(uniqueSpecies)) + ")") def TblSpeciesClicked(self): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) currentColumn = self.tblSpecies.currentColumn() currentRow = self.tblSpecies.currentRow() tempFilter = deepcopy(self.filter) if currentColumn == 0: # the taxonomy order column was clicked, so abort. We won't create a report. # turn off the hourglass cursor before exiting QApplication.restoreOverrideCursor() return if currentColumn == 1: # species column has been clicked so create individual window for that species species = self.tblSpecies.item(currentRow, 1).data(Qt.UserRole) sub = code_Individual.Individual() sub.mdiParent = self.mdiParent sub.FillIndividual(species) self.parent().parent().addSubWindow(sub) self.mdiParent.PositionChildWindow(sub, self) sub.show() sub.resizeMe() if currentColumn > 1: # date column has been clicked so create species list frame for that dateArray # use same start and end date for new filter to show just the single day date = self.tblSpecies.item(currentRow, currentColumn).text() tempFilter.setStartDate(date) tempFilter.setEndDate(date) sub = code_Lists.Lists() sub.mdiParent = self.mdiParent sub.FillSpecies(tempFilter) self.parent().parent().addSubWindow(sub) self.mdiParent.PositionChildWindow(sub, self) sub.show() sub.resizeMe() QApplication.restoreOverrideCursor() def html(self): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) # create start to basic html format html = """ <!DOCTYPE html> <html> <head> </head> <style> * { font-size: 75%; font-family: "Times New Roman", Times, serif; } th { text-align: left; } </style> <body> """ # add title information html = html + ("<H1>" + self.lblLocation.text() + "</H1>") html = html + ("<H3>" + self.lblDateRange.text() + "</H3>") html = html + ("<H3>" + self.lblDetails.text() + "</H3>") html = html + ("<H3>" + self.lblLocationsVisited.text() + "</H3>") html = html + ("<H3>" + self.lblTopSpeciesSeen.text() + "</H3>") # grab the map image from the map tap # process it into a byte array and encode it # so we can insert it inline into the html myPixmap = self.webMap.grab() myPixmap = myPixmap.scaledToWidth(600, Qt.SmoothTransformation) myByteArray = QByteArray() myBuffer = QBuffer(myByteArray) myBuffer.open(QIODevice.WriteOnly) myPixmap.save(myBuffer, "PNG") encodedImage = base64.b64encode(myByteArray) html = html + (""" <img src="data:image/png;base64, """) html = html + str(encodedImage)[1:] html = html + (""" " /> """) html = html + ("<H4>" + "Species" + "</H4>") html = html + ("<font size='2'>" + "<table width='100%'>" + " <tr>") html = html + ("<th>" + "Species" + "</th>" + "<th>" + "First" + "</th> " + "<th></th> " + "<th>" + "Latest" + "</th>" + "</tr>") for r in range(self.tblSpecies.rowCount()): html = html + ( "<tr>" + "<td>" + self.tblSpecies.item(r, 1).text() + "</td>" + "<td>" + self.tblSpecies.item(r, 2).text() + "</td>" + "<td>" + " " + "</td>" + "<td>" + self.tblSpecies.item(r, 3).text() + "</td>" + "</tr>") html = html + "</table>" html = html + ("<H4>" + "Dates" + "</H4>") html = html + ("<font size='2'>" + "<p>") # loopthrough the dates listed in lstDates # create a filter unique to each date # and get species for that date for r in range(self.lstDates.count()): html = html + ("<b>" + self.lstDates.item(r).text() + "</b>") # create filter set to our current location filter = deepcopy(self.filter) filter.setStartDate(self.lstDates.item(r).text()) filter.setEndDate(self.lstDates.item(r).text()) species = self.mdiParent.db.GetSpecies(filter) html = html + ("<br>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 for s in species: html = html + ("<td>" + s + "</td>") if R == 3: html = html + ("</tr>" + "<tr>") R = 0 R = R + 1 html = html + ("<br>" + "<br>" + "</table>") html = html + ( "<H4>" + "Locations" + "</H4>" + "<p>" + "Asterisks indicate species seen only at listed location.") # loopthrough the locations listed in lstLocations # create a filter unique to each location # and get species for that date for r in range(self.lstLocations.count()): html = html + ("<b>" + self.lstLocations.item(r).text() + "</b>") # create filter set to our current location filter = deepcopy(self.filter) filter.setLocationType("Location") filter.setLocationName(self.lstLocations.item(r).text()) species = self.mdiParent.db.GetSpecies(filter) uniqueSpecies = self.mdiParent.db.GetUniqueSpeciesForLocation( self.filter, self.lstLocations.item(r).text(), species, self.filteredSightingList) html = html + ("<br>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 for s in species: if s in uniqueSpecies: s = s + "*" html = html + ("<td>" + s + "</td>") if R == 3: html = html + ("</tr>" + "<tr>") R = 0 R = R + 1 html = html + ("<br>" + "<br>" + "</table>") html = html + ("<p>" + "<H4>" + "New Life Species" + "</H4>" + "<p>" + "<table width='100%'>" "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 if self.lstNewLifeSpecies.count() == 0: html = html + ("<td>" + "None" + "</td>") else: # loopthrough the species listed in lstNewLifeSpecies for r in range(self.lstNewLifeSpecies.count()): html = html + ("<td>" + self.lstNewLifeSpecies.item(r).text() + "</td>") if R == 3: html = html + ("</tr>" + "<tr>") R = 0 R = R + 1 html = html + ("<br>" + "<br>" + "</table>") # set up New Year Species html = html + ("<p>" + "<H4>" + "New Year Species" + "</H4>" + "<p>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 if self.tblNewYearSpecies.rowCount() == 0: html = html + ("<td>" + "None" + "</td>") else: # loopthrough the species listed in lstNewLifeSpecies for r in range(self.tblNewYearSpecies.rowCount()): html = html + ( "<td>" + self.tblNewYearSpecies.item(r, 1).text() + " (" + self.tblNewYearSpecies.item(r, 0).text() + ")" + "</td>") if R == 3: html = html + ("</tr>" "<tr>") R = 0 R = R + 1 html = html + ("</tr>" + "</table>") # set up New Month Species html = html + ("<p>" + "<H4>" + "New Month Species" + "</H4>" + "<p>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 if self.tblNewMonthSpecies.rowCount() == 0: html = html + ("<td>" + "None" + "</td>") else: # loopthrough the species listed in lstNewLifeSpecies for r in range(self.tblNewMonthSpecies.rowCount()): html = html + ( "<td>" + self.tblNewMonthSpecies.item(r, 1).text() + " (" + self.tblNewMonthSpecies.item(r, 0).text() + ")" + "</td>") if R == 3: html = html + ("</tr>" "<tr>") R = 0 R = R + 1 html = html + ("</tr>" + "</table>") # set up New Country Species html = html + ("<p>" + "<H4>" + "New Country Species" + "</H4>" + "<p>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 if self.tblNewCountrySpecies.rowCount() == 0: html = html + ("<td>" + "None" + "</td>") else: # loopthrough the species listed in lstNewLifeSpecies for r in range(self.tblNewCountrySpecies.rowCount()): html = html + ("<td>" + self.tblNewCountrySpecies.item( r, 1).text() + " (" + self.tblNewCountrySpecies.item( r, 0).text() + ")" + "</td>") if R == 2: html = html + ("</tr>" "<tr>") R = 0 R = R + 1 html = html + ("</tr>" + "</table>") html = html + ("<font size>" + "</body>" + "</html>") # set up New State Species html = html + ("<p>" + "<H4>" + "New State Species" + "</H4>" + "<p>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 if self.tblNewStateSpecies.rowCount() == 0: html = html + ("<td>" + "None" + "</td>") else: # loopthrough the species listed in lstNewLifeSpecies for r in range(self.tblNewStateSpecies.rowCount()): html = html + ( "<td>" + self.tblNewStateSpecies.item(r, 1).text() + " (" + self.tblNewStateSpecies.item(r, 0).text() + ")" + "</td>") if R == 2: html = html + ("</tr>" "<tr>") R = 0 R = R + 1 html = html + ("</tr>" + "</table>") # set up New County Species html = html + ("<p>" + "<H4>" + "New County Species" + "</H4>" + "<p>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 if self.tblNewCountySpecies.rowCount() == 0: html = html + ("<td>" + "None" + "</td>") else: # loopthrough the species listed in lstNewLifeSpecies for r in range(self.tblNewCountySpecies.rowCount()): html = html + ("<td>" + self.tblNewCountySpecies.item( r, 1).text() + " (" + self.tblNewCountySpecies.item( r, 0).text() + ")" + "</td>") if R == 2: html = html + ("</tr>" "<tr>") R = 0 R = R + 1 html = html + ("</tr>" + "</table>") # set up New Location Species html = html + ("<p>" + "<H4>" + "New Location Species" + "</H4>" + "<p>" + "<table width='100%'>" + "<tr>") # set up counter R to start a new row after listing each 3 species R = 1 if self.tblNewLocationSpecies.rowCount() == 0: html = html + ("<td>" + "None" + "</td>") else: # loopthrough the species listed in lstNewLifeSpecies for r in range(self.tblNewLocationSpecies.rowCount()): html = html + ("<td>" + self.tblNewLocationSpecies.item( r, 1).text() + " (" + self.tblNewLocationSpecies.item( r, 0).text() + ")" + "</td>") if R == 2: html = html + ("</tr>" "<tr>") R = 0 R = R + 1 html = html + ("</tr>" + "</table>") html = html + ("<font size>" + "</body>" + "</html>") QApplication.restoreOverrideCursor() return (html) def setDateFilter(self): # get location name and type from focus widget. Varies for widgets. if self.focusWidget().objectName() == "lstDates": date = self.focusWidget().currentItem().text() self.mdiParent.setDateFilter(date) if self.focusWidget().objectName() == "tblNewYearSpecies": date = self.focusWidget().item(self.focusWidget().currentRow(), 0).text() startDate = date + "-01-01" endDate = date + "-12-31" self.mdiParent.setDateFilter(startDate, endDate) if self.focusWidget().objectName() == "tblNewMonthSpecies": month = self.focusWidget().item(self.focusWidget().currentRow(), 0).text() self.mdiParent.setSeasonalRangeFilter(month) def setFirstDateFilter(self): # get location name and type from focus widget. Varies for tables. if self.focusWidget().objectName() == "tblSpecies": date = self.focusWidget().item(self.focusWidget().currentRow(), 2).text() self.mdiParent.setDateFilter(date) def setLastDateFilter(self): # get location name and type from focus widget. Varies for tables. if self.focusWidget().objectName() == "tblSpecies": date = self.focusWidget().item(self.focusWidget().currentRow(), 3).text() self.mdiParent.setDateFilter(date) def setLocationFilter(self): # get location name and type from focus widget. Varies for tables. if self.focusWidget().objectName() == "tblNewCountrySpecies": country = self.focusWidget().item(self.focusWidget().currentRow(), 0).text() self.mdiParent.setCountryFilter(country) if self.focusWidget().objectName() == "tblNewStateSpecies": state = self.focusWidget().item(self.focusWidget().currentRow(), 0).text() self.mdiParent.setStateFilter(state) if self.focusWidget().objectName() == "tblNewCountySpecies": county = self.focusWidget().item(self.focusWidget().currentRow(), 0).text() self.mdiParent.setCountyFilter(county) if self.focusWidget().objectName() == "tblNewLocationSpecies": location = self.focusWidget().item(self.focusWidget().currentRow(), 0).text() self.mdiParent.setLocationFilter(location) if self.focusWidget().objectName() == "lstLocations": location = self.focusWidget().currentItem().text() self.mdiParent.setLocationFilter(location) def setSpeciesFilter(self): # get species name from focus widget. Getting the species name is different for tables than for lists. if self.focusWidget().objectName() in ([ "tblSpecies", "tblNewYearSpecies", "tblNewMonthSpecies", "tblNewCountrySpecies", "tblNewStateSpecies", "tblNewCountySpecies", "tblNewLocationSpecies" ]): species = self.focusWidget().item(self.focusWidget().currentRow(), 1).text() if self.focusWidget().objectName() in ([ "lstSpecies", "lstLocationSpecies", "lstLocationUniqueSpecies", "lstNewLifeSpecies" ]): species = self.focusWidget().currentItem().text() self.mdiParent.setSpeciesFilter(species) def resizeEvent(self, event): #routine to handle events on objects, like clicks, lost focus, gained forcus, etc. self.resized.emit() return super(self.__class__, self).resizeEvent(event) def resizeMe(self): windowWidth = self.frameGeometry().width() windowHeight = self.frameGeometry().height() self.scrollArea.setGeometry(5, 27, windowWidth - 10, windowHeight - 35) self.FillMap() def scaleMe(self): scaleFactor = self.mdiParent.scaleFactor windowWidth = 1100 * scaleFactor windowHeight = 625 * scaleFactor self.resize(windowWidth, windowHeight) fontSize = self.mdiParent.fontSize scaleFactor = self.mdiParent.scaleFactor #scale the font for all widgets in window for w in self.scrollArea.children(): try: w.setFont(QFont("Helvetica", fontSize)) except: pass self.lblLocation.setFont(QFont("Helvetica", floor(fontSize * 1.4))) self.lblLocation.setStyleSheet("QLabel { font: bold }") self.lblDateRange.setFont(QFont("Helvetica", floor(fontSize * 1.2))) self.lblDateRange.setStyleSheet("QLabel { font: bold }") self.lblDetails.setFont(QFont("Helvetica", floor(fontSize * 1.2))) self.lblDetails.setStyleSheet("QLabel { font: bold }") metrics = self.tblSpecies.fontMetrics() textHeight = metrics.boundingRect("A").height() textWidth = metrics.boundingRect("Dummy Country").width() for t in ([ self.tblNewYearSpecies, self.tblNewMonthSpecies, self.tblNewCountrySpecies, self.tblNewStateSpecies, self.tblNewCountySpecies ]): header = t.horizontalHeader() header.resizeSection(0, floor(1.2 * textWidth)) for r in range(t.rowCount()): t.setRowHeight(r, textHeight * 1.1) # format tblSpecies, which is laid out differently from the other tables dateWidth = metrics.boundingRect("2222-22-22").width() header = self.tblSpecies.horizontalHeader() header.resizeSection(2, floor(1.5 * dateWidth)) header.resizeSection(3, floor(1.5 * dateWidth)) for r in range(self.tblSpecies.rowCount()): self.tblSpecies.setRowHeight(r, textHeight * 1.1) # format tblNewLocationSpecies, which needs wider location column header = self.tblNewLocationSpecies.horizontalHeader() header.resizeSection(0, floor(4 * textWidth)) for r in range(self.tblNewLocationSpecies.rowCount()): t.setRowHeight(r, textHeight * 1.1)
class Web(QMdiSubWindow, form_Web.Ui_frmWeb): resized = pyqtSignal() def __init__(self): super(self.__class__, self).__init__() self.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose, True) self.mdiParent = "" self.setWindowIcon(QIcon(QPixmap(1, 1))) self.contentType = "Web Page" self.resized.connect(self.resizeMe) self.webView = QWebEngineView(self) self.webView.setObjectName("webView") self.webView.loadFinished.connect(self.LoadFinished) self.webView.loadProgress.connect(self.showLoadProgress) self.title = "" def resizeEvent(self, event): #routine to handle events on objects, like clicks, lost focus, gained forcus, etc. self.resized.emit() return super(self.__class__, self).resizeEvent(event) def resizeMe(self): windowWidth = self.frameGeometry().width() windowHeight = self.frameGeometry().height() self.scrollArea.setGeometry(5, 27, windowWidth - 10, windowHeight - 35) self.webView.setGeometry(5, 27, windowWidth - 10, windowHeight - 35) if self.contentType == "Map": self.webView.adjustSize() self.LoadLocationsMap(self.filter) def html(self): # QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) html = """ <!DOCTYPE html> <html> <head> </head> <body> """ myPixmap = self.webView.grab() myPixmap = myPixmap.scaledToWidth(600, Qt.SmoothTransformation) myByteArray = QByteArray() myBuffer = QBuffer(myByteArray) myBuffer.open(QIODevice.WriteOnly) myPixmap.save(myBuffer, "PNG") encodedImage = base64.b64encode(myByteArray) html = html + (""" <img src="data:image/png;base64, """) html = html + str(encodedImage)[1:] html = html + (""" <font size> </body> </html> """) # QApplication.restoreOverrideCursor() return (html) def scaleMe(self): fontSize = self.mdiParent.fontSize settings = QWebEngineSettings.globalSettings() settings.setFontSize(QWebEngineSettings.DefaultFontSize, floor(fontSize * 1.6)) scaleFactor = self.mdiParent.scaleFactor windowWidth = 800 * scaleFactor windowHeight = 580 * scaleFactor self.resize(windowWidth, windowHeight) def loadAboutYearbird(self): self.title = "About Yearbird" self.contentType = "About" html = """ <!DOCTYPE html> <html> <head> <title>About Yearbird</title> <meta charset="utf-8"> <style> * { font-family: "Times New Roman", Times, serif; } </style> </head> <body> <h1> Yearbird </h1> """ html = html + "<h3>Version: " + self.mdiParent.versionNumber + "</h3>" html = html + "<h3>Date: " + self.mdiParent.versionDate + "</h3>" html = html + """ <font size='4'> <b> Yearbird is a free, open-source application to analyze personal eBird sightings. <br><br> Created by Richard Trinkner. </b> <h3> Licenses </h3> <p> <ul> <li> Yearbird is licensed under the GNU General Public License, version 3. </li> <li> PyQt, by Riverbank Computing, is licensed under the GNU General Public License. </li> <li> Map base layers are retrieved from Google. </li> <li> Map layers that include points and location labels are generated using OpenLayers. OpenLayers is free, Open Source JavaScript, released under the 2-clause BSD License (also known as the FreeBSD). </li> <li> PyInstaller, by the PyInstaller Development Team, Giovanni Bajo and McMillan Enterprise, is licensed under the GPL General Public License. </li> </ul> </font size> </body> </html> """ self.webView.setHtml(html) self.setWindowTitle("About Yearbird") return (True) def LoadWebPage(self, url): # QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) self.webView.load(QUrl(url)) self.resizeMe() self.scaleMe() def LoadFinished(self): # QApplication.restoreOverrideCursor() return () def LoadLocationsMap(self, filter): self.title = "Location Map" coordinatesDict = defaultdict() mapWidth = self.frameGeometry().width() - 10 mapHeight = self.frameGeometry().height() - 35 self.scrollArea.setGeometry(5, 27, mapWidth + 2, mapHeight + 2) self.webView.setGeometry(5, 27, mapWidth + 2, mapHeight + 2) self.contentType = "Map" self.filter = filter locations = self.mdiParent.db.GetLocations(filter) if len(locations) == 0: return (False) for l in locations: coordinates = self.mdiParent.db.GetLocationCoordinates(l) coordinatesDict[l] = coordinates thisMap = code_MapHtml.MapHtml() thisMap.mapHeight = mapHeight thisMap.mapWidth = mapWidth thisMap.coordinatesDict = coordinatesDict html = thisMap.html() self.webView.setHtml(html) # set window title to descriptive map name locationName = filter.getLocationName( ) # str name of region or location or "" locationType = filter.getLocationType() startDate = filter.getStartDate() # str format yyyy-mm-dd or "" endDate = filter.getEndDate() # str format yyyy-mm-dd or "" startSeasonalMonth = filter.getStartSeasonalMonth() # str format mm startSeasonalDay = filter.getStartSeasonalDay() # str format dd endSeasonalMonth = filter.getEndSeasonalMonth() # str format dd endSeasonalDay = filter.getEndSeasonalDay() # str format dd speciesName = filter.getSpeciesName() # str speciesName family = filter.getFamily() # str family name # set main location label, using "All Locations" if none others are selected windowTitle = speciesName if locationName != "": if locationType == "Country": locationName = self.mdiParent.db.GetCountryName(locationName) if locationType == "State": locationName = self.mdiParent.db.GetStateName(locationName) windowTitle = windowTitle + "; " + locationName if startDate != "": dateTitle = startDate + " to " + endDate if startDate == endDate: dateTitle = startDate windowTitle = windowTitle + "; " + dateTitle # set main seasonal range label, if specified if not ((startSeasonalMonth == "") or (endSeasonalMonth == "")): monthRange = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] rangeTitle = monthRange[ int(startSeasonalMonth) - 1] + "-" + startSeasonalDay + " to " + monthRange[ int(endSeasonalMonth) - 1] + "-" + endSeasonalDay windowTitle = windowTitle + "; " + rangeTitle if family != "": family = family[0:family.index("(") - 1] windowTitle = windowTitle + "; " + family if windowTitle == "": windowTitle = "All species, locations, dates and families" #remove leading "; " if needed if windowTitle[0:2] == "; ": windowTitle = windowTitle[2:] # add location count to window title windowTitle = "Map: " + windowTitle + " (" + str( len(coordinatesDict.keys())) + ")" self.setWindowTitle(windowTitle) self.title = windowTitle icon = QIcon() icon.addPixmap(QPixmap(":/icon_map.png"), QIcon.Normal, QIcon.Off) self.setWindowIcon(icon) return (True) def loadChoroplethUSStates(self, filter): from copy import deepcopy import folium from branca.colormap import LinearColormap self.title = "US States Choropleth" self.filter = deepcopy(filter) # find states in filtered sightings stateDict = defaultdict() minimalSightingList = self.mdiParent.db.GetMinimalFilteredSightingsList( filter) for s in minimalSightingList: # Consider only full species, not slash or spuh or hybrid entries commonName = s["commonName"] if "/" not in commonName and "sp." not in commonName and " x " not in commonName: if self.mdiParent.db.TestSighting(s, filter): if s["state"][3:5] not in stateDict.keys(): stateDict[s["state"][3:5]] = [s] else: stateDict[s["state"][3:5]].append(s) # check if no sightings were found. Return false if none found. Abort and display message. if len(stateDict) == 0: return (False) stateTotals = defaultdict() largestTotal = 0 for state in stateDict.keys(): stateSpecies = set() for s in stateDict[state]: stateSpecies.add(s["commonName"]) stateTotals[state] = len(stateSpecies) if len(stateSpecies) > largestTotal: largestTotal = len(stateSpecies) # Load the shape of the zone (US counties) geo_file = self.mdiParent.db.state_geo #add the state values to the geojson so we can access them for tooltips for f in geo_file["features"]: if f["id"] in stateTotals.keys(): f["properties"]["speciesTotal"] = stateTotals[f["id"]] else: f["properties"]["speciesTotal"] = 0 stateTotals[f["id"]] = 0 #create color range for map, using the maximum state value found above colormap = LinearColormap( colors=[(255, 240, 227), (255, 119, 0)], index=[0, round(largestTotal * .75)], vmin=0, vmax=largestTotal, ) # Initialize the folium map state_map = folium.Map(location=[39.5, -98.3], zoom_start=4) # Configure the chloropleth layer and add to map folium.GeoJson(geo_file, style_function=lambda feature: { 'fillColor': 'rgb(240, 240, 240)' if stateTotals[feature['id']] == 0 else colormap(stateTotals[feature['id']]), 'color': 'black', 'weight': .2, 'fillOpacity': .8, }, tooltip=folium.features.GeoJsonTooltip( fields=['name', 'speciesTotal'], aliases=["State", "Species"])).add_to(state_map) # make the layer control box visible folium.LayerControl().add_to(state_map) # get the html string from the map html = state_map.get_root().render() self.webView.setHtml(html) return (True) def loadChoroplethUSCounties(self, filter): from copy import deepcopy import folium from branca.colormap import LinearColormap self.title = "US Counties Choropleth" self.filter = deepcopy(filter) # find states in filtered sightings countyDict = defaultdict() minimalSightingList = self.mdiParent.db.GetMinimalFilteredSightingsList( filter) for s in minimalSightingList: # only count US sightings since we're only showing the US choropleth if s["country"] == "US" and s["state"] not in ["US-HI", "US-AK"]: #only use sightings that have a county code assigned to them # some US sightings won't have them, such as if a checklist is for # an entire state, not localized down to a location or county if "countyCode" in s.keys(): # Consider only full species, not slash or spuh or hybrid entries commonName = s["commonName"] if "/" not in commonName and "sp." not in commonName and " x " not in commonName: if self.mdiParent.db.TestSighting(s, filter): if s["countyCode"] not in countyDict.keys(): countyDict[s["countyCode"]] = [s] else: countyDict[s["countyCode"]].append(s) # check if no sightings were found. Return false if none found. Abort and display message. if len(countyDict) == 0: return (False) countyTotals = defaultdict() largestTotal = 0 for county in countyDict.keys(): countySpecies = set() for s in countyDict[county]: countySpecies.add(s["commonName"]) countyTotals[county] = len(countySpecies) if len(countySpecies) > largestTotal: largestTotal = len(countySpecies) # Load the shape of the zone (US counties) geo_file = self.mdiParent.db.county_geo #add the county values to the geojson so we can access them for tooltips for f in geo_file["features"]: if f["id"] in countyTotals.keys(): f["properties"]["speciesTotal"] = countyTotals[f["id"]] else: f["properties"]["speciesTotal"] = 0 countyTotals[f["id"]] = 0 #create color range for map, using the maximum state value found above colormap = LinearColormap( colors=[(255, 240, 227), (255, 119, 0)], index=[0, round(largestTotal * .75)], vmin=0, vmax=largestTotal, ) # Initialize the folium map county_map = folium.Map(location=[39.5, -98.3], zoom_start=4) # Configure the chloropleth layer and add to map folium.GeoJson(geo_file, style_function=lambda feature: { 'fillColor': 'rgb(240, 240, 240)' if countyTotals[feature['id']] == 0 else colormap(countyTotals[feature['id']]), 'color': 'black', 'weight': 1, 'fillOpacity': .8, 'nan_fill_color': 'white' }, tooltip=folium.features.GeoJsonTooltip( fields=['name', 'state', 'speciesTotal'], aliases=["County", "State", "Species"])).add_to(county_map) # make the layer control box visible folium.LayerControl().add_to(county_map) # get the html string from the map html = county_map.get_root().render() self.webView.setHtml(html) return (True) def loadChoroplethWorldCountries(self, filter): from copy import deepcopy import folium from branca.colormap import LinearColormap self.title = "World Choropleth" self.filter = deepcopy(filter) # find states in filtered sightings countryDict = defaultdict() minimalSightingList = self.mdiParent.db.GetMinimalFilteredSightingsList( filter) for s in minimalSightingList: # Consider only full species, not slash or spuh or hybrid entries commonName = s["commonName"] if "/" not in commonName and "sp." not in commonName and " x " not in commonName: if self.mdiParent.db.TestSighting(s, filter): if s["country"] not in countryDict.keys(): countryDict[s["country"]] = [s] else: countryDict[s["country"]].append(s) # check if no sightings were found. Return false if none found. Abort and display message. if len(countryDict) == 0: return (False) countryTotals = defaultdict() largestTotal = 0 for country in countryDict.keys(): countrySpecies = set() for s in countryDict[country]: countrySpecies.add(s["commonName"]) countryTotals[country] = len(countrySpecies) if len(countrySpecies) > largestTotal: largestTotal = len(countrySpecies) # Load the shape of the zone (US counties) geo_file = self.mdiParent.db.country_geo #add the country values to the geojson so we can access them for tooltips for f in geo_file["features"]: if f["id"] in countryTotals.keys(): f["properties"]["speciesTotal"] = countryTotals[f["id"]] else: f["properties"]["speciesTotal"] = 0 countryTotals[f["id"]] = 0 #create color range for map, using the maximum country value found above colormap = LinearColormap( colors=[(255, 240, 227), (255, 119, 0)], index=[0, round(largestTotal * .75)], vmin=0, vmax=largestTotal, ) # Initialize the folium map choro_map = folium.Map(location=[1, 1], zoom_start=1) # Configure the chloropleth layer and add to map folium.GeoJson(geo_file, style_function=lambda feature: { 'fillColor': 'rgb(240, 240, 240)' if countryTotals[feature['id']] == 0 else colormap(countryTotals[feature['id']]), 'color': 'black', 'weight': 1, 'fillOpacity': .8, 'nan_fill_color': 'white' }, tooltip=folium.features.GeoJsonTooltip( fields=['name', 'speciesTotal'], aliases=["Country", "Species"])).add_to(choro_map) # make the layer control box visible folium.LayerControl().add_to(choro_map) # get the html string from the map html = choro_map.get_root().render() self.webView.setHtml(html) return (True) def loadChoroplethWorldSubregion1(self, filter): return () def showLoadProgress(self, percent): if percent < 100: self.setWindowTitle(self.title + ": " + str(percent) + "%") else: self.setWindowTitle(self.title)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalFrame = QtWidgets.QFrame(self.centralwidget) self.verticalFrame.setGeometry(QtCore.QRect(30, 30, 211, 501)) self.verticalFrame.setAutoFillBackground(True) self.verticalFrame.setFrameShape(QtWidgets.QFrame.WinPanel) self.verticalFrame.setFrameShadow(QtWidgets.QFrame.Raised) self.verticalFrame.setObjectName("verticalFrame") self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalFrame) self.verticalLayout.setObjectName("verticalLayout") spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout.addItem(spacerItem) self.comboBox = QtWidgets.QComboBox(self.verticalFrame) self.comboBox.setObjectName("comboBox") self.comboBox.addItems(["Traffic Volume", "Traffic Incidents"]) self.verticalLayout.addWidget(self.comboBox) self.comboBox_2 = QtWidgets.QComboBox(self.verticalFrame) self.comboBox_2.setObjectName("comboBox_2") self.comboBox_2.addItems(["2016", "2017", "2018"]) self.verticalLayout.addWidget(self.comboBox_2) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout.addItem(spacerItem1) self.pushButton_1 = QtWidgets.QPushButton(self.verticalFrame) self.pushButton_1.setObjectName("pushButton_1") self.pushButton_1.clicked.connect(lambda: self.b1Callback()) self.verticalLayout.addWidget(self.pushButton_1) spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout.addItem(spacerItem2) self.pushButton_2 = QtWidgets.QPushButton(self.verticalFrame) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_2.clicked.connect(lambda: self.b2Callback()) self.verticalLayout.addWidget(self.pushButton_2) spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout.addItem(spacerItem3) self.pushButton_3 = QtWidgets.QPushButton(self.verticalFrame) self.pushButton_3.setObjectName("pushButton_3") self.pushButton_3.clicked.connect(lambda: self.b3Callback()) self.verticalLayout.addWidget(self.pushButton_3) spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout.addItem(spacerItem4) self.pushButton_4 = QtWidgets.QPushButton(self.verticalFrame) self.pushButton_4.setObjectName("pushButton_4") self.pushButton_4.clicked.connect(lambda: self.b4Callback()) self.verticalLayout.addWidget(self.pushButton_4) spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout.addItem(spacerItem5) self.label = QtWidgets.QLabel(self.verticalFrame) self.label.setStyleSheet("QLabel {background-color:rgb(255, 0, 0)}") self.label.setFrameShape(QtWidgets.QFrame.Box) self.label.setFrameShadow(QtWidgets.QFrame.Sunken) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget) self.stackedWidget.setGeometry(QtCore.QRect(270, 30, 491, 521)) self.stackedWidget.setFrameShape(QtWidgets.QFrame.Panel) self.stackedWidget.setFrameShadow(QtWidgets.QFrame.Sunken) self.stackedWidget.setObjectName("stackedWidget") self.page = QtWidgets.QWidget() self.page.setObjectName("page") self.widget = QtWidgets.QWidget(self.page) self.widget.setGeometry(QtCore.QRect(0, 0, 490, 520)) self.widget.setObjectName("widget") self.stackedWidget.addWidget(self.page) #pg.setConfigOptions(foreground='d',background='k') self.page_2 = QtWidgets.QWidget() self.page_2.setObjectName("page_2") self.tableWidget = QtWidgets.QTableWidget(self.page_2) self.tableWidget.setGeometry(QtCore.QRect(0, 0, 490, 520)) self.tableWidget.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents) self.tableWidget.setObjectName("tableWidget") self.tableWidget.setColumnCount(3) self.tableWidget.setRowCount(4) self.stackedWidget.addWidget(self.page_2) self.page_3 = QtWidgets.QWidget() self.page_3.setObjectName("page_3") self.webView = QWebEngineView(self.page_3) self.webView.setGeometry(QtCore.QRect(0, 0, 490, 520)) self.webView.load(QUrl("file:///C:/traffic_2016.html")) self.webView.show() self.webView.setObjectName("webView") self.stackedWidget.addWidget(self.page_3) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.gw = pg.GraphicsLayoutWidget(parent=self.page) self.gw.resize(490, 520) self.plot = self.gw.addPlot(title='Dummy', labels={ 'left': 'Y', 'bottom': 'X' }) self.retranslateUi(MainWindow) self.comboBox.setCurrentIndex(0) self.stackedWidget.setCurrentIndex(1) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton_1.setText(_translate("MainWindow", "Read")) self.pushButton_2.setText(_translate("MainWindow", "Sort")) self.pushButton_3.setText(_translate("MainWindow", "Analyze")) self.pushButton_4.setText(_translate("MainWindow", "Map")) self.label.setText(_translate("MainWindow", "TextLabel")) def b1Callback(self): try: self.pending() self.stackedWidget.setCurrentIndex(1) self.tableWidget.clear() choice1 = self.comboBox.currentText() choice2 = self.comboBox_2.currentText() data = {} if 'olum' in choice1: if '16' in choice2: data = d_v_16 elif '17' in choice2: data = d_v_17 else: data = d_v_18 else: if '16' in choice2: data = d_a_16 elif '17' in choice2: data = d_a_17 else: data = d_a_18 self.populate_table(data) self.success('Collection read') except: self.failure('Collection not read') def b2Callback(self): try: self.pending() self.stackedWidget.setCurrentIndex(1) self.tableWidget.clear() choice1 = self.comboBox.currentText() choice2 = self.comboBox_2.currentText() data = {} if 'olum' in choice1: if '16' in choice2: data = d_v_16_s elif '17' in choice2: data = d_v_17_s else: data = d_v_18_s else: if '16' in choice2: data = d_a_16_s elif '17' in choice2: data = d_a_17_s else: data = d_a_18_s self.populate_table(data) self.success('Data sorted') except: self.failure('Data not sorted') def b3Callback(self): try: self.pending() self.stackedWidget.setCurrentIndex(0) self.plot.clear() year = [2016, 2017, 2018] title = '' typ = '' data = [0, 0, 0] choice1 = self.comboBox.currentText() if 'olum' in choice1: title = 'Traffic Flow plot' data = [m_v_16, m_v_17, m_v_18] typ = 'Highest traffic volume' else: title = 'Traffic Incident plot' data = [m_a_16, m_a_17, m_a_18] typ = 'Highest incident concentration' self.plot.setLabels(title=title, left=typ, bottom='Year') self.curve = self.plot.plot(year, data) self.success('Data plotted') except: self.failure('Data not plotted') def b4Callback(self): try: self.pending() self.stackedWidget.setCurrentIndex(2) self.tableWidget.clear() choice1 = self.comboBox.currentText() choice2 = self.comboBox_2.currentText() link_name = '' if 'olum' in choice1: if '16' in choice2: link_name = "file:///C:/traffic_2016.html" elif '17' in choice2: link_name = "file:///C:/traffic_2017.html" else: link_name = "file:///C:/traffic_2018.html" else: if '16' in choice2: link_name = "file:///C:/incidents_2016.html" elif '17' in choice2: link_name = "file:///C:/incidents_2017.html" else: link_name = "file:///C:/incidents_2018.html" self.webView.load(QUrl(link_name)) self.success('Map displayed') except: self.failure('Map not displayed') def populate_table(self, struct): self.tableWidget.clear() col = row = 0 headers = [] for key in struct.keys(): headers.append(key) row = len(struct[key]) col += 1 self.tableWidget.setHorizontalHeaderLabels(headers) self.tableWidget.setColumnCount(col) self.tableWidget.setRowCount(row) for n, key in enumerate(struct): for m, item in enumerate(struct[key]): newitem = QtWidgets.QTableWidgetItem(str(item)) self.tableWidget.setItem(m, n, newitem) def pending(self): self.label.setText('Executing...') self.label.setStyleSheet("QLabel {background-color:yellow}") def success(self, text): self.label.setText(text) self.label.setStyleSheet("QLabel {background-color:green}") def failure(self, text): self.label.setText(text) self.label.setStyleSheet("QLabel {background-color:red}")
class Browser(Application): # pylint: disable=too-many-instance-attributes """The main browser""" url_scheme: QWebEngineUrlScheme bridge_initialized: bool dev_view: QWebEngineView dev_page: WebPage qdock: QDockWidget def __init__(self): super().__init__() self.init() # self.load() def init(self): """Initialize browser""" logger.debug("Initializing Browser Window") if web_greeter_config["config"]["greeter"]["debug_mode"]: os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = '12345' url_scheme = "web-greeter" self.url_scheme = QWebEngineUrlScheme(url_scheme.encode()) self.url_scheme.setDefaultPort(QWebEngineUrlScheme.PortUnspecified) self.url_scheme.setFlags(QWebEngineUrlScheme.SecureScheme or QWebEngineUrlScheme.LocalScheme or QWebEngineUrlScheme.LocalAccessAllowed) QWebEngineUrlScheme.registerScheme(self.url_scheme) self.profile = QWebEngineProfile.defaultProfile() self.interceptor = QtUrlRequestInterceptor(url_scheme) self.url_scheme_handler = QtUrlSchemeHandler() self.view = QWebEngineView(parent=self.window) self.page = WebPage() self.view.setPage(self.page) self.page.setObjectName("WebG Page") self.view.setObjectName("WebG View") self.channel = QWebChannel(self.page) self.bridge_initialized = False self.profile.installUrlSchemeHandler(url_scheme.encode(), self.url_scheme_handler) self._initialize_page() if web_greeter_config["config"]["greeter"]["debug_mode"]: self._initialize_devtools() else: self.view.setContextMenuPolicy(Qt.PreventContextMenu) self._init_actions() if web_greeter_config["app"]["frame"]: self._init_menu_bar() else: self.window.setWindowFlags(self.window.windowFlags() | Qt.FramelessWindowHint) if web_greeter_config["config"]["greeter"]["secure_mode"]: if hasattr(QWebEngineProfile, "setUrlRequestInterceptor"): self.profile.setUrlRequestInterceptor(self.interceptor) else: # Older Qt5 versions self.profile.setRequestInterceptor(self.interceptor) self.page.setBackgroundColor(QColor(0, 0, 0)) self.window.setStyleSheet("""QMainWindow, QWebEngineView { background: #000000; }""") self.window.setCentralWidget(self.view) logger.debug("Browser Window created") def load(self): """Load theme and initialize bridge""" self.load_theme() self.bridge_objects = (self.greeter, self.greeter_config, self.theme_utils) self.initialize_bridge_objects() self.load_script(':/_greeter/js/bundle.js', 'Web Greeter Bundle') def _initialize_devtools(self): self.dev_view = QWebEngineView(parent=self.window) self.dev_page = WebPage() self.dev_view.setPage(self.dev_page) self.page.setDevToolsPage(self.dev_page) self.dev_view.setObjectName("Devtools view") self.dev_page.setObjectName("Devtools page") self.dev_page.windowCloseRequested.connect( lambda: self.toggle_devtools_value(False)) inspect_element_action = self.page.action(self.page.InspectElement) inspect_element_action.triggered.connect( lambda: self.toggle_devtools_value(True)) self.qdock = QDockWidget() self.qdock.setWidget(self.dev_view) self.qdock.setFeatures(QDockWidget.DockWidgetMovable or QDockWidget.DockWidgetClosable) self.window.addDockWidget(Qt.RightDockWidgetArea, self.qdock) self.qdock.hide() logger.debug("DevTools initialized") def toggle_devtools(self): """Toggle devtools""" if not web_greeter_config["config"]["greeter"]["debug_mode"]: return self.toggle_devtools_value(not self.qdock.isVisible()) def toggle_devtools_value(self, value: bool): """Toggle devtools by value""" if not web_greeter_config["config"]["greeter"]["debug_mode"]: return if value: self.qdock.show() self.dev_view.setFocus() else: self.qdock.hide() self.view.setFocus() def _init_actions(self): """Init browser actions""" self.exit_action = QAction(QIcon("exit.png"), "&Quit", self.window) self.exit_action.setShortcut("Ctrl+Q") self.exit_action.setStatusTip("Exit application") self.exit_action.triggered.connect(qApp.quit) self.toggle_dev_action = QAction("Toggle Developer Tools", self.window) self.toggle_dev_action.setShortcut("Ctrl+Shift+I") self.toggle_dev_action.triggered.connect(self.toggle_devtools) self.fullscreen_action = QAction("Toggle Fullscreen", self.window) self.fullscreen_action.setShortcut("F11") self.fullscreen_action.triggered.connect( lambda: self.toggle_fullscreen(not self.window.isFullScreen())) self.inc_zoom_action = QAction("Zoom In", self.window) self.inc_zoom_action.setShortcut("Ctrl++") self.inc_zoom_action.triggered.connect(self._inc_zoom) self.dec_zoom_action = QAction("Zoom Out", self.window) self.dec_zoom_action.setShortcut("Ctrl+-") self.dec_zoom_action.triggered.connect(self._dec_zoom) self.reset_zoom_action = QAction("Actual Size", self.window) self.reset_zoom_action.setShortcut("Ctrl+0") self.reset_zoom_action.triggered.connect(self._reset_zoom) self.window.addAction(self.exit_action) self.window.addAction(self.toggle_dev_action) self.window.addAction(self.fullscreen_action) self.window.addAction(self.inc_zoom_action) self.window.addAction(self.dec_zoom_action) self.window.addAction(self.reset_zoom_action) def _inc_zoom(self): if self.view.hasFocus(): self.page.increaseZoom() else: self.dev_page.increaseZoom() def _dec_zoom(self): if self.view.hasFocus(): self.page.decreaseZoom() else: self.dev_page.decreaseZoom() def _reset_zoom(self): if self.view.hasFocus(): self.page.setZoomFactor(1) else: self.dev_page.setZoomFactor(1) def _init_menu_bar(self): minimize_action = QAction("Minimize", self.window) minimize_action.setShortcut("Ctrl+M") minimize_action.triggered.connect(self.window.showMinimized) close_action = QAction("Close", self.window) close_action.setShortcut("Ctrl+W") close_action.triggered.connect(self.window.close) self.page.action( self.page.ReloadAndBypassCache).setText("Force Reload") self.page.fullScreenRequested.connect(self.accept_fullscreen) self.menu_bar = QMenuBar() file_menu = self.menu_bar.addMenu("&File") file_menu.addAction(self.exit_action) edit_menu = self.menu_bar.addMenu("&Edit") edit_menu.addAction(self.page.action(self.page.Undo)) edit_menu.addAction(self.page.action(self.page.Redo)) edit_menu.addSeparator() edit_menu.addAction(self.page.action(self.page.Cut)) edit_menu.addAction(self.page.action(self.page.Copy)) edit_menu.addAction(self.page.action(self.page.Paste)) edit_menu.addSeparator() edit_menu.addAction(self.page.action(self.page.SelectAll)) view_menu = self.menu_bar.addMenu("&View") view_menu.addAction(self.page.action(self.page.Reload)) view_menu.addAction(self.page.action(self.page.ReloadAndBypassCache)) view_menu.addAction(self.toggle_dev_action) view_menu.addSeparator() view_menu.addAction(self.reset_zoom_action) view_menu.addAction(self.inc_zoom_action) view_menu.addAction(self.dec_zoom_action) view_menu.addSeparator() view_menu.addAction(self.fullscreen_action) window_menu = self.menu_bar.addMenu("&Window") window_menu.addAction(minimize_action) window_menu.addAction(close_action) # help_menu = menu_bar.addMenu("&Help") self.window.setMenuBar(self.menu_bar) def accept_fullscreen(self, request): """Accepts fullscreen requests""" if web_greeter_config["config"]["greeter"]["debug_mode"]: request.reject() return if request.toggleOn(): self.toggle_fullscreen(True) else: self.toggle_fullscreen(False) request.accept() def toggle_fullscreen(self, value: bool): """Toggle fullscreen""" if not web_greeter_config["config"]["greeter"]["debug_mode"]: return if value: state = self.states["FULLSCREEN"] self.window.setWindowFlags(self.window.windowFlags() or Qt.FramelessWindowHint) self.menu_bar.setParent(None) self.window.setMenuBar(None) else: state = self.states["NORMAL"] self.window.setWindowFlags(self.window.windowFlags() or not Qt.FramelessWindowHint) self.window.setMenuBar(self.menu_bar) try: self.window.windowHandle().setWindowState(state) except (AttributeError, TypeError): self.window.setWindowState(state) def _initialize_page(self): page_settings = self.page.settings().globalSettings() if not web_greeter_config["config"]["greeter"]["secure_mode"]: ENABLED_SETTINGS.append('LocalContentCanAccessRemoteUrls') else: DISABLED_SETTINGS.append('LocalContentCanAccessRemoteUrls') for setting in DISABLED_SETTINGS: try: page_settings.setAttribute( getattr(QWebEngineSettings, setting), False) except AttributeError: pass for setting in ENABLED_SETTINGS: try: page_settings.setAttribute( getattr(QWebEngineSettings, setting), True) except AttributeError: pass self.page.setView(self.view) def load_theme(self): """Load theme""" theme = web_greeter_config["config"]["greeter"]["theme"] dir_t = "/usr/share/web-greeter/themes/" path_to_theme = os.path.join(dir_t, theme, "index.html") def_theme = "gruvbox" if theme.startswith("/"): path_to_theme = theme elif theme.__contains__(".") or theme.__contains__("/"): path_to_theme = os.path.join(os.getcwd(), theme) path_to_theme = os.path.realpath(path_to_theme) if not path_to_theme.endswith(".html"): path_to_theme = os.path.join(path_to_theme, "index.html") if not os.path.exists(path_to_theme): print("Path does not exists", path_to_theme) path_to_theme = os.path.join(dir_t, def_theme, "index.html") web_greeter_config["config"]["greeter"]["theme"] = path_to_theme url = QUrl(f"web-greeter://app/{path_to_theme}") self.page.load(url) logger.debug("Theme loaded") @staticmethod def _create_webengine_script(path: Url, name: str) -> QWebEngineScript: script = QWebEngineScript() script_file = QFile(path) # print(script_file, path) if script_file.open(QFile.ReadOnly): script_string = str(script_file.readAll(), 'utf-8') script.setInjectionPoint(QWebEngineScript.DocumentCreation) script.setName(name) script.setWorldId(QWebEngineScript.MainWorld) script.setSourceCode(script_string) # print(script_string) return script def _get_channel_api_script(self) -> QWebEngineScript: return self._create_webengine_script(':/qtwebchannel/qwebchannel.js', 'QWebChannel API') def _init_bridge_channel(self) -> None: self.page.setWebChannel(self.channel) self.bridge_initialized = True def initialize_bridge_objects(self) -> None: """Initialize bridge objects :D""" if not self.bridge_initialized: self._init_bridge_channel() registered_objects = self.channel.registeredObjects() for obj in self.bridge_objects: if obj not in registered_objects: # pylint: disable=protected-access self.channel.registerObject(obj._name, obj) # print("Registered", obj._name) def load_script(self, path: Url, name: str): """Loads a script in page""" qt_api = self._get_channel_api_script() qt_api_source = qt_api.sourceCode() script = self._create_webengine_script(path, name) script.setSourceCode(qt_api_source + "\n" + script.sourceCode()) self.page.scripts().insert(script)
class LocateRecognizeView(QWidget): def __init__(self, *args, **kwargs): super(LocateRecognizeView, self).__init__(*args, **kwargs) self.ori_image_path = None # 选中的原图像路径 self.ori_label_list = [] # 选中图像对应的文本信息, 若没有则为空 self.res_image_list = None # [(定位出文本行的图像, [文本行图像])] self.start_flag = False # 当前是否正在定位识别 self.show_diff_flag = False # 是否显示对比结果视图,默认为False(选中图像无对应txt文件) self.locate_start_timer = 0 # 定位计时器起始时间 self.locate_end_timer = 0 # 定位计时器结束时间 self.rec_start_timer = 0 # 识别计时器起始时间 self.rec_end_timer = 0 # 识别计时器结束时间 self.setStyleSheet(LRStylesheet) # 初始化GUI样式 self.initUi() # 初始化GUI布局 self.texts_rect = [] # 文本行图像位置 self.dbnetThread = None # 初始化DBNet定位后台线程 self.backThread = None # 初始化形态学定位后台线程 self.recogBackThread = None # 初始化识别后台线程 # 界面布局 def initUi(self): # 内容视图, 管理所有的子视图 self.content_view = QWidget(self) self.content_view.setObjectName("Content_View") self.content_view.setGeometry(QRect(0, 0, Sub_Win_Width, Sub_Win_Height)) # 顶部状态栏 self.top_state_bar = QWidget(self.content_view) self.top_state_bar.setObjectName("Top_State_Bar") self.top_state_bar.setGeometry(QRect(0, 0, Top_State_Bar_Width, Top_State_Bar_Height)) # 选择文件按钮: self.choose_img_btn = QPushButton(self.top_state_bar) self.choose_img_btn.setGeometry(QRect(Top_State_Bar_Width / 2 - 50, 10, 100, 60)) self.choose_img_btn.setObjectName("Choose_Img_Btn") self.choose_img_btn.setText("选择文件") self.choose_img_btn.clicked.connect(self.choose_img_file) # 启用DBNet按钮 self.switch_button = SwitchButton(self.content_view) self.switch_button.setGeometry(QRect(680, 90, 70, 30)) self.switch_button.setObjectName("Switch_Button") self.switch_label = QLabel(self.content_view) self.switch_label.setObjectName("Switch_Label") self.switch_label.setGeometry(QRect(665, 120, 100, 30)) self.switch_label.setAlignment(Qt.AlignCenter) self.switch_label.setText("启用DBNet") # 全尺寸背景视图 self.full_size_content_widget = QWidget(self.content_view) self.full_size_content_widget.setObjectName("Full_Size_Content_Widget") self.full_size_content_widget.setGeometry(QRect(60, 150, Locate_Show_Area_Width * 2 + 50 + 25 * 2, Locate_Show_Area_Height + 120)) # 全尺寸webview self.full_size_web_view = QWebEngineView(self.full_size_content_widget) self.full_size_web_view.setObjectName("Full_Size_Web_View") self.full_size_web_view.setGeometry(QRect(20, 20, Locate_Show_Area_Width * 2 + 50 + 10, Locate_Show_Area_Height + 30)) self.full_size_web_view.setHidden(True) # 默认隐藏 # 退出全尺寸按钮 self.exit_full_button = QPushButton(self.full_size_content_widget) self.exit_full_button.setObjectName("Exit_Full_Button") self.exit_full_button.setGeometry(QRect(590, 765, 100, 40)) self.exit_full_button.setText("退出") self.exit_full_button.clicked.connect(self.exit_full_size_view_mode) # 中间识别区域 self.show_area_widget = QWidget(self.content_view) self.show_area_widget.setObjectName("Show_Area_Widget") self.show_area_widget.setGeometry(QRect(60, 150, Locate_Show_Area_Width * 2 + 50 + 25 * 2, Locate_Show_Area_Height + 120)) # 左侧图像区域: 显示定位出文本行的图片 self.ori_image_View = QLabel(self.show_area_widget) self.ori_image_View.setGeometry(QRect(25, 25, Locate_Show_Area_Width, Locate_Show_Area_Height)) self.ori_image_View.setObjectName("Ori_Image_View") self.ori_image_View.setScaledContents(True) # 对图像进行缩放显示 # 中间放大按钮区域 self.mid_circle_area = QLabel(self.show_area_widget) self.mid_circle_area.setObjectName("Mid_Circle_Area") self.mid_circle_area.setGeometry(QRect(Locate_Show_Area_Width+25, 320, 50, 50)) self.mid_circle_area.setHidden(True) # 默认隐藏, 显示对比视图时再显示 # 放大按钮 self.mid_zoom_btn = QPushButton(self.mid_circle_area) self.mid_zoom_btn.setObjectName("Mid_Zoom_Btn") self.mid_zoom_btn.setGeometry(QRect(5, 5, 40, 40)) self.mid_zoom_btn.clicked.connect(self.show_full_size_view) # 右侧识别文字区域 self.text_area_widget = QLabel(self.show_area_widget) self.text_area_widget.setGeometry(QRect(25 + Locate_Show_Area_Width + 50, 25, Locate_Show_Area_Width, Locate_Show_Area_Height)) self.text_area_widget.setObjectName("Text_Area_Widget") # 自定义textview: 无对应标签时展示 self.res_text_view = PaintTextView(self.text_area_widget) self.res_text_view.setGeometry(QRect(20, 20, Locate_Show_Area_Width - 20 * 2, Locate_Show_Area_Height - 20 * 2)) self.res_text_view.setObjectName("Res_Text_View") # web界面: 有对应标签时展示 self.diff_web_view = QWebEngineView(self.text_area_widget) self.diff_web_view.setObjectName("Diff_Web_View") self.diff_web_view.setGeometry(QRect(20, 20, Locate_Show_Area_Width - 20 * 2, Locate_Show_Area_Height - 20 * 2)) self.diff_web_view.setHidden(True) # 默认隐藏 self.diff_web_view.setZoomFactor(0.70) # 缩放 # 下方状态信息栏 self.bottom_state_bar = QWidget(self.show_area_widget) self.bottom_state_bar.setGeometry(QRect(250, 740, 800, 60)) self.bottom_state_bar.setObjectName("Bottom_State_Bar") # 定位总时长Label self.locate_time_label = QLabel(self.bottom_state_bar) self.locate_time_label.setGeometry(QRect(20, 20, 200, 20)) self.locate_time_label.setObjectName("Locate_Time_Label") self.locate_time_label.setAlignment(Qt.AlignLeft) # AR label self.ar_label = QLabel(self.bottom_state_bar) self.ar_label.setGeometry(QRect(260, 20, 100, 20)) self.ar_label.setObjectName("AR_Label") self.ar_label.setAlignment(Qt.AlignLeft) # 相似度Label self.sim_ratio_label = QLabel(self.bottom_state_bar) self.sim_ratio_label.setGeometry(QRect(360, 20, 100, 20)) self.sim_ratio_label.setObjectName("Sim_Ratio_Label") self.sim_ratio_label.setAlignment(Qt.AlignCenter) # CR label self.cr_label = QLabel(self.bottom_state_bar) self.cr_label.setGeometry(QRect(500, 20, 100, 20)) self.cr_label.setObjectName("CR_Label") self.cr_label.setAlignment(Qt.AlignLeft) # 识别总时长Label self.rec_time_label = QLabel(self.bottom_state_bar) self.rec_time_label.setGeometry(QRect(560, 20, 200, 20)) self.rec_time_label.setObjectName("Rec_Time_Label") self.rec_time_label.setAlignment(Qt.AlignRight) # 事件响应 @pyqtSlot() # 选择单个图像文件 def choose_img_file(self): if self.start_flag: # 正在处理中,则不再响应 return # 获取图像路径: 支持的图像类型(jpg, png) file_path, file_type = QFileDialog.getOpenFileName(self, "选取文件", fm.get_Curr_Dir(), "Images (*.jpg *.png)") if file_path == "": # 取消选择 return # 重置参数 self.show_diff_flag = False self.ori_image_path = None self.ori_label_list = [] self.res_image_list = None self.locate_start_timer = 0 self.locate_end_timer = 0 self.rec_start_timer = 0 self.rec_end_timer = 0 self.backThread = None self.dbnetThread = None self.exit_full_size_view_mode() self.mid_circle_area.setHidden(True) # 默认隐藏放大按钮区域 self.res_text_view.clear_text_for_update() # 清除上次显示的残留信息 self.diff_web_view.load(QUrl("")) # 清除上次显示的残留信息 txt_file_path = file_path.split('.')[0] + ".txt" # 查找与选择图像同名的txt文件 if os.path.exists(txt_file_path): # 图像有对应的标签txt文件 self.res_text_view.setHidden(True) # 隐藏自定义textview self.diff_web_view.setHidden(False) # 显示对比视图 self.show_diff_flag = True # 修改对比视图显示标志, 也即存在标签标志 with open(txt_file_path, 'r', encoding='gbk') as f: # gbk格式打开 texts = f.readlines() for line in texts: self.ori_label_list.append(line.strip('\n')) f.close() else: # 图像没有对应的标签txt文件 self.res_text_view.setHidden(False) # 显示自定义textview self.diff_web_view.setHidden(True) # 隐藏对比视图 self.show_diff_flag = False # 修改对比视图显示标志 self.start_flag = True # 开始处理, 修改Start_Flag self.ori_image_path = file_path self.ori_image_View.setPixmap(QPixmap(file_path)) # 先显示原图像 self.locate_start_timer = time.perf_counter() # 定位计时器开始计时 self.locate_time_label.setText("DBNet定位中,请等待...") self.rec_time_label.setText("") # 状态栏label置空 self.sim_ratio_label.setText("") self.ar_label.setText("") self.cr_label.setText("") if self.switch_button.state: # True, 启用DBNet print("启用DBNet") self.dbnetThread = DBNetBackThread(self.ori_image_path) # 初始化 DBNet 后台线程处理图片 self.dbnetThread._signal.connect(self.update_dbnet_res_img) # 设置 DBNet 后台线程回调函数 self.dbnetThread.start() # 启动DBNet后台线程 else: # False, 启用形态学 print("启用形态学") self.backThread = LocateBackThread([self.ori_image_path]) # 初始化 形态学 后台线程处理图片 self.backThread._signal.connect(self.update_Res_ImageView) # 设置 形态学 后台线程回调函数 self.backThread.start() # 启动形态学后台线程 # 更新 DBNet 定位结果视图, qImg:(定位出文本行的图像, [文本行图像], [文本行图像位置]) def update_dbnet_res_img(self, qImg): self.ori_image_View.setPixmap(QPixmap.fromImage(qImg[0])) # 更新定位出文本行的图像 self.texts_rect = qImg[2] # 保存文本行图像位置 self.locate_end_timer = time.perf_counter() # 定位计时器结束计时 duration = (self.locate_end_timer - self.locate_start_timer) * 1000 # 更新计时Label self.locate_time_label.setText("DBNet 定位时长: {:.2f} ms".format(duration)) self.rec_time_label.setText("CRNN识别中,请等待...") # 识别定位出的文本行 self.rec_start_timer = time.perf_counter() # 识别计时器开始计时 self.recogBackThread = RecogBackThread([qImg[1]]) # 初始化识别后台线程处理图片 self.recogBackThread._signal.connect(self.update_texts_in_textView) # 设置后台线程回调函数 self.recogBackThread.start() # 启动后台线程 # 刷新形态学定位结果视图 def update_Res_ImageView(self, qImg): self.res_image_list = qImg # [(定位出文本行的图像, [文本行图像], [文本行图像位置])] self.ori_image_View.setPixmap(QPixmap.fromImage(self.res_image_list[0][0])) # 结果数组中只有一个元素(只选择一张图片定位) self.texts_rect = self.res_image_list[0][2] # 保存文本行图像位置 self.locate_end_timer = time.perf_counter() # 定位计时器结束计时 duration = (self.locate_end_timer - self.locate_start_timer) * 1000 # 更新计时Label self.locate_time_label.setText("形态学 定位时长: {:.2f} ms".format(duration)) # 识别定位出的文本行 self.rec_start_timer = time.perf_counter() # 识别计时器开始计时 self.recogBackThread = RecogBackThread([self.res_image_list[0][1]]) # 初始化一个新的后台线程处理图片 self.recogBackThread._signal.connect(self.update_texts_in_textView) # 设置后台线程回调函数 self.recogBackThread.start() # 启动后台线程 # 更新识别出的文字信息, texts: [[str1,str2,...], [str1, str2, ....]] def update_texts_in_textView(self, texts): self.start_flag = False # 定位识别完成,修改当前状态 self.rec_end_timer = time.perf_counter() # 识别计时器结束计时 duration = (self.rec_end_timer - self.rec_start_timer) * 1000 # 更新计时Label self.rec_time_label.setText("识别时长: {:.2f} ms".format(duration)) self.sim_ratio_label.setText("相似度计算中,请等待...") if self.show_diff_flag: # 显示对比视图 self.mid_circle_area.setHidden(False) # 显示放大按钮区域 diff = difflib.HtmlDiff().make_file(self.ori_label_list, texts[0]) # save_path = "/Users/soyou/Documents/EProjects/HWExplorer/diff.html" outfile = open(save_path, 'w') # TODO: 绝对路径修改 outfile.write(diff) # 保存html文件 outfile.close() self.diff_web_view.load(QUrl.fromLocalFile(save_path)) # 显示对比视图 seq = difflib.SequenceMatcher(None, '.'.join(self.ori_label_list), '.'.join(texts[0])) ratio = seq.ratio() self.sim_ratio_label.setText("相似度: {:.3f}".format(ratio)) # 设置文本相似度 num, ar_num, cr_num = calculate_ar_cr('.'.join(self.ori_label_list), '.'.join(texts[0])) self.ar_label.setText("AR: {:.2f}".format(ar_num/num)) # 计算AR self.cr_label.setText("CR: {:.2f}".format(cr_num/num)) # 计算CR else: # 隐藏对比视图 self.sim_ratio_label.setText(" ") # 文本相似度置空 self.res_text_view.redraw_text_in_view(texts[0], self.texts_rect) # 自定义textview绘制文字信息 # 显示全尺寸视图 def show_full_size_view(self): self.show_area_widget.setHidden(True) self.full_size_web_view.setHidden(False) # TODO: 使用项目内相对路径 self.full_size_web_view.load(QUrl.fromLocalFile("/Users/soyou/Documents/EProjects/HWExplorer/diff.html")) # 退出全尺寸视图模式 def exit_full_size_view_mode(self): self.show_area_widget.setHidden(False) self.full_size_web_view.setHidden(True)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1189, 574) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(69, 78, 81)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush) brush = QtGui.QBrush(QtGui.QColor(57, 65, 67)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush) brush = QtGui.QBrush(QtGui.QColor(30, 34, 36)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(69, 78, 81)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush) brush = QtGui.QBrush(QtGui.QColor(57, 65, 67)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush) brush = QtGui.QBrush(QtGui.QColor(30, 34, 36)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(69, 78, 81)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush) brush = QtGui.QBrush(QtGui.QColor(57, 65, 67)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush) brush = QtGui.QBrush(QtGui.QColor(30, 34, 36)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush) brush = QtGui.QBrush(QtGui.QColor(23, 26, 27)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush) brush = QtGui.QBrush(QtGui.QColor(46, 52, 54)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush) MainWindow.setPalette(palette) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/resources/app.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setSizeConstraint( QtWidgets.QLayout.SetDefaultConstraint) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setSizeConstraint( QtWidgets.QLayout.SetDefaultConstraint) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.fileNameLabel = QtWidgets.QLabel(self.centralwidget) self.fileNameLabel.setObjectName("fileNameLabel") self.horizontalLayout_3.addWidget(self.fileNameLabel) self.fileNameTextBox = QtWidgets.QLineEdit(self.centralwidget) self.fileNameTextBox.setReadOnly(True) self.fileNameTextBox.setObjectName("fileNameTextBox") self.horizontalLayout_3.addWidget(self.fileNameTextBox) self.openFileBtn = QtWidgets.QToolButton(self.centralwidget) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(":/resources/open.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.openFileBtn.setIcon(icon1) self.openFileBtn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.openFileBtn.setObjectName("openFileBtn") self.horizontalLayout_3.addWidget(self.openFileBtn) self.verticalLayout.addLayout(self.horizontalLayout_3) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.previousBtn = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.previousBtn.sizePolicy().hasHeightForWidth()) self.previousBtn.setSizePolicy(sizePolicy) self.previousBtn.setObjectName("previousBtn") self.horizontalLayout_2.addWidget(self.previousBtn) self.comboBox = QtWidgets.QComboBox(self.centralwidget) self.comboBox.setObjectName("comboBox") self.horizontalLayout_2.addWidget(self.comboBox) self.nextBtn = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.nextBtn.sizePolicy().hasHeightForWidth()) self.nextBtn.setSizePolicy(sizePolicy) self.nextBtn.setObjectName("nextBtn") self.horizontalLayout_2.addWidget(self.nextBtn) self.testCaseBtn = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.testCaseBtn.sizePolicy().hasHeightForWidth()) self.testCaseBtn.setSizePolicy(sizePolicy) icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap(":/resources/download.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.testCaseBtn.setIcon(icon2) self.testCaseBtn.setIconSize(QtCore.QSize(28, 28)) self.testCaseBtn.setFlat(True) self.testCaseBtn.setObjectName("testCaseBtn") self.horizontalLayout_2.addWidget(self.testCaseBtn) self.problemDownloadBtn = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.problemDownloadBtn.sizePolicy().hasHeightForWidth()) self.problemDownloadBtn.setSizePolicy(sizePolicy) self.problemDownloadBtn.setIcon(icon2) self.problemDownloadBtn.setIconSize(QtCore.QSize(28, 28)) self.problemDownloadBtn.setFlat(True) self.problemDownloadBtn.setObjectName("problemDownloadBtn") self.horizontalLayout_2.addWidget(self.problemDownloadBtn) self.verticalLayout.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.statementWebView = QWebView(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.statementWebView.sizePolicy().hasHeightForWidth()) self.statementWebView.setSizePolicy(sizePolicy) self.statementWebView.setContextMenuPolicy(QtCore.Qt.NoContextMenu) self.statementWebView.setUrl(QtCore.QUrl("about:blank")) self.statementWebView.setObjectName("statementWebView") self.horizontalLayout.addWidget(self.statementWebView) self.solutionWebView = QWebView(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.solutionWebView.sizePolicy().hasHeightForWidth()) self.solutionWebView.setSizePolicy(sizePolicy) self.solutionWebView.setContextMenuPolicy(QtCore.Qt.NoContextMenu) self.solutionWebView.setUrl(QtCore.QUrl("about:blank")) self.solutionWebView.setObjectName("solutionWebView") self.horizontalLayout.addWidget(self.solutionWebView) self.verticalLayout.addLayout(self.horizontalLayout) self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1189, 22)) self.menubar.setObjectName("menubar") self.menuOpen = QtWidgets.QMenu(self.menubar) self.menuOpen.setObjectName("menuOpen") MainWindow.setMenuBar(self.menubar) self.statusBar = QtWidgets.QStatusBar(MainWindow) self.statusBar.setObjectName("statusBar") MainWindow.setStatusBar(self.statusBar) self.actionOpen = QtWidgets.QAction(MainWindow) self.actionOpen.setIcon(icon1) self.actionOpen.setObjectName("actionOpen") self.actionReset = QtWidgets.QAction(MainWindow) self.actionReset.setObjectName("actionReset") self.actionExit = QtWidgets.QAction(MainWindow) icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap(":/resources/exit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionExit.setIcon(icon3) self.actionExit.setObjectName("actionExit") self.menuOpen.addAction(self.actionOpen) self.menuOpen.addAction(self.actionReset) self.menuOpen.addSeparator() self.menuOpen.addAction(self.actionExit) self.menubar.addAction(self.menuOpen.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle( _translate("MainWindow", "Hackerrank Submission Data Reader")) self.fileNameLabel.setText(_translate("MainWindow", "File Name")) self.openFileBtn.setText(_translate("MainWindow", "Open")) self.previousBtn.setText(_translate("MainWindow", "<")) self.nextBtn.setText(_translate("MainWindow", ">")) self.testCaseBtn.setText( _translate("MainWindow", "Download Test Cases")) self.problemDownloadBtn.setText( _translate("MainWindow", "Download Problem Sattement")) self.menuOpen.setTitle(_translate("MainWindow", "File")) self.actionOpen.setText(_translate("MainWindow", "Open")) self.actionOpen.setShortcut(_translate("MainWindow", "Ctrl+O")) self.actionReset.setText(_translate("MainWindow", "Reset")) self.actionReset.setShortcut(_translate("MainWindow", "Ctrl+R")) self.actionExit.setText(_translate("MainWindow", "Exit"))
class Ui_MainWindow(QtWidgets.QMainWindow): def __init__(self): super(Ui_MainWindow,self).__init__() self.setupUi(self) def setupUi(self,MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1048, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.emailLabel = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.emailLabel.sizePolicy().hasHeightForWidth()) self.emailLabel.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setBold(True) font.setUnderline(True) font.setWeight(75) self.emailLabel.setFont(font) self.emailLabel.setObjectName("emailLabel") self.verticalLayout.addWidget(self.emailLabel) self.emailQle = QtWidgets.QLineEdit(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.emailQle.sizePolicy().hasHeightForWidth()) self.emailQle.setSizePolicy(sizePolicy) self.emailQle.setMinimumSize(QtCore.QSize(200, 0)) self.emailQle.setObjectName("emailQle") self.verticalLayout.addWidget(self.emailQle) self.emailButton = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.emailButton.sizePolicy().hasHeightForWidth()) self.emailButton.setSizePolicy(sizePolicy) self.emailButton.setObjectName("emailButton") self.verticalLayout.addWidget(self.emailButton) self.searchTermLabel = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.searchTermLabel.sizePolicy().hasHeightForWidth()) self.searchTermLabel.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setBold(True) font.setUnderline(True) font.setWeight(75) self.searchTermLabel.setFont(font) self.searchTermLabel.setObjectName("searchTermLabel") self.verticalLayout.addWidget(self.searchTermLabel) self.searchTermQle = QtWidgets.QLineEdit(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.searchTermQle.sizePolicy().hasHeightForWidth()) self.searchTermQle.setSizePolicy(sizePolicy) self.searchTermQle.setObjectName("searchTermQle") self.verticalLayout.addWidget(self.searchTermQle) self.searchButton = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.searchButton.sizePolicy().hasHeightForWidth()) self.searchButton.setSizePolicy(sizePolicy) self.searchButton.setObjectName("searchButton") self.verticalLayout.addWidget(self.searchButton) self.summariesButton = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.summariesButton.sizePolicy().hasHeightForWidth()) self.summariesButton.setSizePolicy(sizePolicy) self.summariesButton.setObjectName("summariesButton") self.verticalLayout.addWidget(self.summariesButton) self.progressBar = QtWidgets.QProgressBar(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.progressBar.sizePolicy().hasHeightForWidth()) self.progressBar.setSizePolicy(sizePolicy) self.progressBar.setMaximum(100) self.progressBar.setProperty("value", 0) self.progressBar.setObjectName("progressBar") self.verticalLayout.addWidget(self.progressBar) self.pmidsButton = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.pmidsButton.sizePolicy().hasHeightForWidth()) self.pmidsButton.setSizePolicy(sizePolicy) self.pmidsButton.setObjectName("Generate PMID List") self.verticalLayout.addWidget(self.pmidsButton) self.quickStatsLabel = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.quickStatsLabel.sizePolicy().hasHeightForWidth()) self.quickStatsLabel.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setBold(True) font.setUnderline(True) font.setWeight(75) self.quickStatsLabel.setFont(font) self.quickStatsLabel.setObjectName("quickStatsLabel") self.verticalLayout.addWidget(self.quickStatsLabel) self.previousSearchTermLabelName = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.previousSearchTermLabelName.sizePolicy().hasHeightForWidth()) self.previousSearchTermLabelName.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setItalic(True) self.previousSearchTermLabelName.setFont(font) self.previousSearchTermLabelName.setTextFormat(QtCore.Qt.PlainText) self.previousSearchTermLabelName.setObjectName("previousSearchTermLabelName") self.verticalLayout.addWidget(self.previousSearchTermLabelName) self.pmRefCountLabel = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.pmRefCountLabel.sizePolicy().hasHeightForWidth()) self.pmRefCountLabel.setSizePolicy(sizePolicy) self.pmRefCountLabel.setObjectName("pmRefCountLabel") self.verticalLayout.addWidget(self.pmRefCountLabel) self.pmcRefCountLabel = QtWidgets.QLabel(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.pmcRefCountLabel.sizePolicy().hasHeightForWidth()) self.pmcRefCountLabel.setSizePolicy(sizePolicy) self.pmcRefCountLabel.setObjectName("pmcRefCountLabel") self.verticalLayout.addWidget(self.pmcRefCountLabel) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setObjectName("label_2") self.verticalLayout_2.addWidget(self.label_2) self.webEngineView = QWebEngineView(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.webEngineView.sizePolicy().hasHeightForWidth()) self.webEngineView.setSizePolicy(sizePolicy) self.webEngineView.setUrl(QtCore.QUrl("https://www.ncbi.nlm.nih.gov/Structure/flink/flink.cgi")) self.webEngineView.setObjectName("webEngineView") self.verticalLayout_2.addWidget(self.webEngineView) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setObjectName("label") self.verticalLayout_2.addWidget(self.label) self.treeView = QtWidgets.QTreeView(self.centralwidget) self.treeView.setMinimumSize(QtCore.QSize(200, 150)) self.treeView.setObjectName("treeView") self.verticalLayout_2.addWidget(self.treeView) self.horizontalLayout.addLayout(self.verticalLayout_2) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1048, 22)) self.menubar.setNativeMenuBar(True) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.emailLabel.setText(_translate("MainWindow", "Email:")) self.emailButton.setText(_translate("MainWindow", "Set Email")) self.searchTermLabel.setText(_translate("MainWindow", "Search Term:")) self.searchButton.setText(_translate("MainWindow", "Search")) self.summariesButton.setText(_translate("MainWindow", "Generate Summaries")) self.pmidsButton.setText(_translate("MainWindow", "Generate PMID List")) self.quickStatsLabel.setText(_translate("MainWindow", "Quick Stats:")) self.previousSearchTermLabelName.setText(_translate("MainWindow", "None")) self.pmRefCountLabel.setText(_translate("MainWindow", "Pm Ref Count:")) self.pmcRefCountLabel.setText(_translate("MainWindow", "Pmc Ref Count:")) self.label_2.setText(_translate("MainWindow", "NCBI FLink WebPage. Right-click for context menu to access back/forward/reload buttons.")) self.label.setText(_translate("MainWindow", "Double-click file (below) to change name:"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(972, 575) MainWindow.setMinimumSize(QtCore.QSize(972, 575)) MainWindow.setMaximumSize(QtCore.QSize(972, 575)) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalFrame_3 = QtWidgets.QFrame(self.centralwidget) self.horizontalFrame_3.setGeometry(QtCore.QRect(0, 0, 971, 571)) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.horizontalFrame_3.sizePolicy().hasHeightForWidth()) self.horizontalFrame_3.setSizePolicy(sizePolicy) self.horizontalFrame_3.setObjectName("horizontalFrame_3") self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.horizontalFrame_3) self.horizontalLayout_3.setContentsMargins(4, 4, 4, 4) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.widget = QtWidgets.QWidget(self.horizontalFrame_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget.sizePolicy().hasHeightForWidth()) self.widget.setSizePolicy(sizePolicy) self.widget.setObjectName("widget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout_2.setSizeConstraint( QtWidgets.QLayout.SetDefaultConstraint) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.widget1 = QtWidgets.QWidget(self.widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget1.sizePolicy().hasHeightForWidth()) self.widget1.setSizePolicy(sizePolicy) self.widget1.setObjectName("widget1") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget1) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.label = QtWidgets.QLabel(self.widget1) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.label.sizePolicy().hasHeightForWidth()) self.label.setSizePolicy(sizePolicy) self.label.setLayoutDirection(QtCore.Qt.LeftToRight) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.verticalLayout_2.addWidget(self.label) self.listWidget = QtWidgets.QListWidget(self.widget1) self.listWidget.setObjectName("listWidget") self.verticalLayout_2.addWidget(self.listWidget) self.Button_check = QtWidgets.QPushButton(self.widget1) self.Button_check.setObjectName("Button_check") self.verticalLayout_2.addWidget(self.Button_check) self.horizontalLayout_2.addWidget(self.widget1) self.horizontalLayout_3.addWidget(self.widget) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.widget2 = QWebEngineView() self.widget2.setUrl(QUrl("https://gametowndev.tk/news.html")) self.widget2.setObjectName("widget2") self.verticalLayout.addWidget(self.widget2) self.widget3 = QtWidgets.QWidget(self.horizontalFrame_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget3.sizePolicy().hasHeightForWidth()) self.widget3.setSizePolicy(sizePolicy) self.widget3.setObjectName("widget3") self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget3) self.horizontalLayout.setObjectName("horizontalLayout") spacerItem = QtWidgets.QSpacerItem(400, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.Button_option = QtWidgets.QPushButton(self.widget3) self.Button_option.setObjectName("Button_option") self.horizontalLayout.addWidget(self.Button_option) self.Button_launch = QtWidgets.QPushButton(self.widget3) self.Button_launch.setObjectName("Button_launch") self.horizontalLayout.addWidget(self.Button_launch) self.verticalLayout.addWidget(self.widget3) self.horizontalLayout_3.addLayout(self.verticalLayout) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) '''self.Button_check.clicked.connect()''' QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MRS Launcher")) self.label.setText(_translate("MainWindow", "모드팩 목록")) self.Button_check.setText(_translate("MainWindow", "새로고침")) self.Button_option.setText(_translate("MainWindow", "설정")) self.Button_launch.setText(_translate("MainWindow", "실행"))
class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(620, 518) self.gridLayout = QtWidgets.QGridLayout(Dialog) self.gridLayout.setObjectName("gridLayout") self.jumpBt = QtWidgets.QPushButton(Dialog) self.jumpBt.setObjectName("jumpBt") self.gridLayout.addWidget(self.jumpBt, 0, 2, 1, 1) self.spinBox = QtWidgets.QSpinBox(Dialog) self.spinBox.setObjectName("spinBox") self.gridLayout.addWidget(self.spinBox, 0, 1, 1, 1) self.comboBox = QtWidgets.QComboBox(Dialog) self.comboBox.setObjectName("comboBox") self.gridLayout.addWidget(self.comboBox, 0, 3, 1, 2) self.sumLabel = QtWidgets.QLabel(Dialog) self.sumLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.sumLabel.setObjectName("sumLabel") self.gridLayout.addWidget(self.sumLabel, 0, 0, 1, 1) self.label = QtWidgets.QLabel(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.label.sizePolicy().hasHeightForWidth()) self.label.setSizePolicy(sizePolicy) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 3, 0, 1, 6) self.pushButton_4 = QtWidgets.QPushButton(Dialog) self.pushButton_4.setObjectName("pushButton_4") self.gridLayout.addWidget(self.pushButton_4, 5, 3, 1, 3) # self.widget = QtWidgets.QWidget(Dialog) # self.widget.setObjectName("widget") self.browser = QWebEngineView() self.browser.setObjectName("webView") self.gridLayout.addWidget(self.browser, 4, 0, 1, 6) self.confirmBt = QtWidgets.QPushButton(Dialog) self.confirmBt.setObjectName("confirmBt") self.gridLayout.addWidget(self.confirmBt, 0, 5, 1, 1) self.pushButton_3 = QtWidgets.QPushButton(Dialog) self.pushButton_3.setObjectName("pushButton_3") self.gridLayout.addWidget(self.pushButton_3, 5, 0, 1, 3) self.pushButton = QtWidgets.QPushButton(Dialog) self.pushButton.setObjectName("pushButton") self.gridLayout.addWidget(self.pushButton, 6, 3, 1, 3) self.pushButton_2 = QtWidgets.QPushButton(Dialog) self.pushButton_2.setObjectName("pushButton_2") self.gridLayout.addWidget(self.pushButton_2, 6, 0, 1, 3) self.lineEdit = QtWidgets.QLineEdit(Dialog) self.lineEdit.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.lineEdit.sizePolicy().hasHeightForWidth()) self.lineEdit.setSizePolicy(sizePolicy) self.lineEdit.setAutoFillBackground(False) self.lineEdit.setInputMethodHints(QtCore.Qt.ImhNone) self.lineEdit.setDragEnabled(False) self.lineEdit.setClearButtonEnabled(False) self.lineEdit.setObjectName("lineEdit") self.gridLayout.addWidget(self.lineEdit, 8, 0, 1, 2) self.SearchBt = QtWidgets.QPushButton(Dialog) self.SearchBt.setEnabled(True) self.SearchBt.setObjectName("SearchBt") self.gridLayout.addWidget(self.SearchBt, 8, 2, 1, 1) self.SearchPrev = QtWidgets.QPushButton(Dialog) self.SearchPrev.setEnabled(True) self.SearchPrev.setObjectName("SearchPrev") self.gridLayout.addWidget(self.SearchPrev, 8, 3, 1, 1) self.numberLabel = QtWidgets.QLabel(Dialog) self.numberLabel.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.numberLabel.sizePolicy().hasHeightForWidth()) self.numberLabel.setSizePolicy(sizePolicy) self.numberLabel.setAlignment(QtCore.Qt.AlignCenter) self.numberLabel.setObjectName("numberLabel") self.gridLayout.addWidget(self.numberLabel, 8, 4, 1, 1) self.SearchNext = QtWidgets.QPushButton(Dialog) self.SearchNext.setEnabled(True) self.SearchNext.setObjectName("SearchNext") self.gridLayout.addWidget(self.SearchNext, 8, 5, 1, 1) self.KeySearchBt = QtWidgets.QPushButton(Dialog) self.KeySearchBt.setObjectName("KeySearchBt") self.gridLayout.addWidget(self.KeySearchBt, 7, 0, 1, 6) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Question Bank")) self.jumpBt.setText(_translate("Dialog", "题号跳转")) self.sumLabel.setText(_translate("Dialog", "总题数:0")) self.label.setText(_translate("Dialog", "等待出题...")) self.pushButton_4.setText(_translate("Dialog", "查看解析")) self.confirmBt.setText(_translate("Dialog", "确定")) self.pushButton_3.setText(_translate("Dialog", "下一题")) self.pushButton.setText(_translate("Dialog", "随机")) self.pushButton_2.setText(_translate("Dialog", "上一题")) self.SearchBt.setText(_translate("Dialog", "查询")) self.SearchPrev.setText(_translate("Dialog", "上一个")) self.numberLabel.setText(_translate("Dialog", "0/0")) self.SearchNext.setText(_translate("Dialog", "下一个")) self.KeySearchBt.setText(_translate("Dialog", "关键字查询"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.setEnabled(True) MainWindow.resize(913, 971) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(3) sizePolicy.setVerticalStretch(33) sizePolicy.setHeightForWidth( MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu) MainWindow.setAutoFillBackground(True) MainWindow.setStyleSheet("") MainWindow.setAnimated(True) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.centralWidget) self.verticalLayout_5.setObjectName("verticalLayout_5") self.tabWidget_PGMS = QtWidgets.QTabWidget(self.centralWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(20) sizePolicy.setVerticalStretch(44) sizePolicy.setHeightForWidth( self.tabWidget_PGMS.sizePolicy().hasHeightForWidth()) self.tabWidget_PGMS.setSizePolicy(sizePolicy) self.tabWidget_PGMS.setMinimumSize(QtCore.QSize(800, 700)) self.tabWidget_PGMS.setLayoutDirection(QtCore.Qt.LeftToRight) self.tabWidget_PGMS.setAutoFillBackground(True) self.tabWidget_PGMS.setStyleSheet("") self.tabWidget_PGMS.setTabBarAutoHide(True) self.tabWidget_PGMS.setObjectName("tabWidget_PGMS") self.tab_Combination = QtWidgets.QWidget() self.tab_Combination.setObjectName("tab_Combination") self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.tab_Combination) self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.scrollArea_3 = QtWidgets.QScrollArea(self.tab_Combination) self.scrollArea_3.setWidgetResizable(True) self.scrollArea_3.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.scrollArea_3.setObjectName("scrollArea_3") self.scrollAreaWidgetContents_3 = QtWidgets.QWidget() self.scrollAreaWidgetContents_3.setGeometry( QtCore.QRect(0, 0, 852, 958)) self.scrollAreaWidgetContents_3.setObjectName( "scrollAreaWidgetContents_3") self.verticalLayout_8 = QtWidgets.QVBoxLayout( self.scrollAreaWidgetContents_3) self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) self.verticalLayout_8.setObjectName("verticalLayout_8") self.verticalLayout_6 = QtWidgets.QVBoxLayout() self.verticalLayout_6.setObjectName("verticalLayout_6") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.verticalLayout_7 = QtWidgets.QVBoxLayout() self.verticalLayout_7.setObjectName("verticalLayout_7") self.label_7 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_7.setText("") self.label_7.setObjectName("label_7") self.verticalLayout_7.addWidget(self.label_7) self.label_10 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.label_10.sizePolicy().hasHeightForWidth()) self.label_10.setSizePolicy(sizePolicy) self.label_10.setObjectName("label_10") self.verticalLayout_7.addWidget(self.label_10) self.label_11 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_11.setObjectName("label_11") self.verticalLayout_7.addWidget(self.label_11) self.label_12 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_12.setObjectName("label_12") self.verticalLayout_7.addWidget(self.label_12) self.horizontalLayout_3.addLayout(self.verticalLayout_7) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.horizontalLayout_3.addItem(spacerItem1) self.gridLayout_5 = QtWidgets.QGridLayout() self.gridLayout_5.setObjectName("gridLayout_5") self.label_8 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_8.setObjectName("label_8") self.gridLayout_5.addWidget(self.label_8, 0, 0, 1, 1) self.label_9 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_9.setObjectName("label_9") self.gridLayout_5.addWidget(self.label_9, 0, 1, 1, 1) self.doubleSpinBox_returns_min = QtWidgets.QDoubleSpinBox( self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.doubleSpinBox_returns_min.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_returns_min.setSizePolicy(sizePolicy) self.doubleSpinBox_returns_min.setMaximum(0.3) self.doubleSpinBox_returns_min.setSingleStep(0.01) self.doubleSpinBox_returns_min.setProperty("value", 0.0) self.doubleSpinBox_returns_min.setObjectName( "doubleSpinBox_returns_min") self.gridLayout_5.addWidget(self.doubleSpinBox_returns_min, 1, 0, 1, 1) self.doubleSpinBox_returns_max = QtWidgets.QDoubleSpinBox( self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.doubleSpinBox_returns_max.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_returns_max.setSizePolicy(sizePolicy) self.doubleSpinBox_returns_max.setMinimum(0.0) self.doubleSpinBox_returns_max.setMaximum(10.0) self.doubleSpinBox_returns_max.setSingleStep(0.1) self.doubleSpinBox_returns_max.setProperty("value", 0.0) self.doubleSpinBox_returns_max.setObjectName( "doubleSpinBox_returns_max") self.gridLayout_5.addWidget(self.doubleSpinBox_returns_max, 1, 1, 1, 1) self.doubleSpinBox_maxdrawdown_min = QtWidgets.QDoubleSpinBox( self.scrollAreaWidgetContents_3) self.doubleSpinBox_maxdrawdown_min.setMinimum(0.1) self.doubleSpinBox_maxdrawdown_min.setMaximum(1.0) self.doubleSpinBox_maxdrawdown_min.setSingleStep(0.01) self.doubleSpinBox_maxdrawdown_min.setProperty("value", 0.7) self.doubleSpinBox_maxdrawdown_min.setObjectName( "doubleSpinBox_maxdrawdown_min") self.gridLayout_5.addWidget(self.doubleSpinBox_maxdrawdown_min, 2, 0, 1, 1) self.doubleSpinBox_maxdrawdown_max = QtWidgets.QDoubleSpinBox( self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.doubleSpinBox_maxdrawdown_max. sizePolicy().hasHeightForWidth()) self.doubleSpinBox_maxdrawdown_max.setSizePolicy(sizePolicy) self.doubleSpinBox_maxdrawdown_max.setMinimum(0.2) self.doubleSpinBox_maxdrawdown_max.setMaximum(1.0) self.doubleSpinBox_maxdrawdown_max.setSingleStep(0.01) self.doubleSpinBox_maxdrawdown_max.setProperty("value", 1.0) self.doubleSpinBox_maxdrawdown_max.setObjectName( "doubleSpinBox_maxdrawdown_max") self.gridLayout_5.addWidget(self.doubleSpinBox_maxdrawdown_max, 2, 1, 1, 1) self.doubleSpinBox_sharp_min = QtWidgets.QDoubleSpinBox( self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.doubleSpinBox_sharp_min.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_sharp_min.setSizePolicy(sizePolicy) self.doubleSpinBox_sharp_min.setMaximum(40.0) self.doubleSpinBox_sharp_min.setSingleStep(0.05) self.doubleSpinBox_sharp_min.setObjectName("doubleSpinBox_sharp_min") self.gridLayout_5.addWidget(self.doubleSpinBox_sharp_min, 3, 0, 1, 1) self.doubleSpinBox_sharp_max = QtWidgets.QDoubleSpinBox( self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.doubleSpinBox_sharp_max.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_sharp_max.setSizePolicy(sizePolicy) self.doubleSpinBox_sharp_max.setProperty("value", 10.0) self.doubleSpinBox_sharp_max.setObjectName("doubleSpinBox_sharp_max") self.gridLayout_5.addWidget(self.doubleSpinBox_sharp_max, 3, 1, 1, 1) self.horizontalLayout_3.addLayout(self.gridLayout_5) self.line_2 = QtWidgets.QFrame(self.scrollAreaWidgetContents_3) self.line_2.setFrameShape(QtWidgets.QFrame.VLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.horizontalLayout_3.addWidget(self.line_2) spacerItem2 = QtWidgets.QSpacerItem(200, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem2) self.pushButton_start_combination = QtWidgets.QPushButton( self.scrollAreaWidgetContents_3) self.pushButton_start_combination.setObjectName( "pushButton_start_combination") self.horizontalLayout_3.addWidget(self.pushButton_start_combination) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem3) self.verticalLayout_6.addLayout(self.horizontalLayout_3) self.horizontalLayout_7 = QtWidgets.QHBoxLayout() self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.checkBox_stock = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_stock.setObjectName("checkBox_stock") self.horizontalLayout_7.addWidget(self.checkBox_stock) self.checkBox_compound = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_compound.setObjectName("checkBox_compound") self.horizontalLayout_7.addWidget(self.checkBox_compound) self.checkBox_future_manage = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_future_manage.setObjectName("checkBox_future_manage") self.horizontalLayout_7.addWidget(self.checkBox_future_manage) self.checkBox_event = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_event.setObjectName("checkBox_event") self.horizontalLayout_7.addWidget(self.checkBox_event) self.checkBox_bond = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_bond.setObjectName("checkBox_bond") self.horizontalLayout_7.addWidget(self.checkBox_bond) self.checkBox_macro = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_macro.setObjectName("checkBox_macro") self.horizontalLayout_7.addWidget(self.checkBox_macro) self.checkBox_combination_fund = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_combination_fund.setObjectName( "checkBox_combination_fund") self.horizontalLayout_7.addWidget(self.checkBox_combination_fund) self.checkBox_relative_fund = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_relative_fund.setObjectName("checkBox_relative_fund") self.horizontalLayout_7.addWidget(self.checkBox_relative_fund) self.checkBox_others = QtWidgets.QCheckBox( self.scrollAreaWidgetContents_3) self.checkBox_others.setObjectName("checkBox_others") self.horizontalLayout_7.addWidget(self.checkBox_others) self.verticalLayout_6.addLayout(self.horizontalLayout_7) self.verticalLayout_8.addLayout(self.verticalLayout_6) self.QWebEngineview_Combination_monte_markovitz = QWebEngineView( self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_monte_markovitz.setMinimumSize( QtCore.QSize(0, 300)) self.QWebEngineview_Combination_monte_markovitz.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_monte_markovitz.setObjectName( "QWebEngineview_Combination_monte_markovitz") self.verticalLayout_8.addWidget( self.QWebEngineview_Combination_monte_markovitz) self.horizontalLayout_5 = QtWidgets.QHBoxLayout() self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.QWebEngineview_Combination_Pie = QWebEngineView( self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_Pie.setMinimumSize( QtCore.QSize(50, 200)) self.QWebEngineview_Combination_Pie.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_Pie.setObjectName( "QWebEngineview_Combination_Pie") self.horizontalLayout_5.addWidget(self.QWebEngineview_Combination_Pie) self.QWebEngineview_Combination_Table = QWebEngineView( self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_Table.setMinimumSize( QtCore.QSize(0, 200)) self.QWebEngineview_Combination_Table.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_Table.setObjectName( "QWebEngineview_Combination_Table") self.horizontalLayout_5.addWidget( self.QWebEngineview_Combination_Table) self.verticalLayout_8.addLayout(self.horizontalLayout_5) self.QWebEngineview_Combination_Versus = QWebEngineView( self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_Versus.setEnabled(True) self.QWebEngineview_Combination_Versus.setMinimumSize( QtCore.QSize(0, 300)) self.QWebEngineview_Combination_Versus.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_Versus.setObjectName( "QWebEngineview_Combination_Versus") self.verticalLayout_8.addWidget(self.QWebEngineview_Combination_Versus) self.QWebEngineview_Combination_monte_markovitz.raise_() self.QWebEngineview_Combination_Versus.raise_() self.scrollArea_3.setWidget(self.scrollAreaWidgetContents_3) self.horizontalLayout_6.addWidget(self.scrollArea_3) self.tabWidget_PGMS.addTab(self.tab_Combination, "") self.verticalLayout_5.addWidget(self.tabWidget_PGMS) MainWindow.setCentralWidget(self.centralWidget) self.menuBar = QtWidgets.QMenuBar(MainWindow) self.menuBar.setGeometry(QtCore.QRect(0, 0, 913, 23)) self.menuBar.setObjectName("menuBar") MainWindow.setMenuBar(self.menuBar) self.action = QtWidgets.QAction(MainWindow) self.action.setObjectName("action") self.action_2 = QtWidgets.QAction(MainWindow) self.action_2.setObjectName("action_2") self.action_3 = QtWidgets.QAction(MainWindow) self.action_3.setObjectName("action_3") self.action_4 = QtWidgets.QAction(MainWindow) self.action_4.setObjectName("action_4") self.action_5 = QtWidgets.QAction(MainWindow) self.action_5.setObjectName("action_5") self.action_6 = QtWidgets.QAction(MainWindow) self.action_6.setObjectName("action_6") self.action_8 = QtWidgets.QAction(MainWindow) self.action_8.setObjectName("action_8") self.action_9 = QtWidgets.QAction(MainWindow) self.action_9.setObjectName("action_9") self.action_10 = QtWidgets.QAction(MainWindow) self.action_10.setObjectName("action_10") self.action_11 = QtWidgets.QAction(MainWindow) self.action_11.setObjectName("action_11") self.action_Qt = QtWidgets.QAction(MainWindow) self.action_Qt.setObjectName("action_Qt") self.action_PyQt = QtWidgets.QAction(MainWindow) self.action_PyQt.setObjectName("action_PyQt") self.action_12 = QtWidgets.QAction(MainWindow) self.action_12.setObjectName("action_12") self.retranslateUi(MainWindow) self.tabWidget_PGMS.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "基金量化投研系統v0.11")) self.label_10.setText(_translate("MainWindow", "收益")) self.label_11.setText(_translate("MainWindow", "最大回撤")) self.label_12.setText(_translate("MainWindow", "Sharp比")) self.label_8.setText(_translate("MainWindow", "最小範圍")) self.label_9.setText(_translate("MainWindow", "最大範圍")) self.pushButton_start_combination.setText( _translate("MainWindow", "開始")) self.checkBox_stock.setText(_translate("MainWindow", "股票策略")) self.checkBox_compound.setText(_translate("MainWindow", "複合策略")) self.checkBox_future_manage.setText(_translate("MainWindow", "管理期貨")) self.checkBox_event.setText(_translate("MainWindow", "事件驅動")) self.checkBox_bond.setText(_translate("MainWindow", "債券策略")) self.checkBox_macro.setText(_translate("MainWindow", "宏觀策略")) self.checkBox_combination_fund.setText(_translate( "MainWindow", "組合基金")) self.checkBox_relative_fund.setText(_translate("MainWindow", "相對價值")) self.checkBox_others.setText(_translate("MainWindow", "其他策略")) self.tabWidget_PGMS.setTabText( self.tabWidget_PGMS.indexOf(self.tab_Combination), _translate("MainWindow", "產品組合管理")) self.action.setText(_translate("MainWindow", "開啟")) self.action_2.setText(_translate("MainWindow", "關閉")) self.action_3.setText(_translate("MainWindow", "儲存")) self.action_4.setText(_translate("MainWindow", "退出")) self.action_5.setText(_translate("MainWindow", "複製")) self.action_6.setText(_translate("MainWindow", "貼上")) self.action_8.setText(_translate("MainWindow", "哈哈")) self.action_9.setText(_translate("MainWindow", "關於")) self.action_10.setText(_translate("MainWindow", "使用說明")) self.action_11.setText(_translate("MainWindow", "關於軟體")) self.action_Qt.setText(_translate("MainWindow", "關於Qt")) self.action_PyQt.setText(_translate("MainWindow", "關於PyQt")) self.action_12.setText(_translate("MainWindow", "其他"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.setEnabled(True) MainWindow.resize(913, 971) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(3) sizePolicy.setVerticalStretch(33) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu) MainWindow.setAutoFillBackground(True) MainWindow.setStyleSheet("") MainWindow.setAnimated(True) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.centralWidget) self.verticalLayout_5.setObjectName("verticalLayout_5") self.tabWidget_PGMS = QtWidgets.QTabWidget(self.centralWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(20) sizePolicy.setVerticalStretch(44) sizePolicy.setHeightForWidth(self.tabWidget_PGMS.sizePolicy().hasHeightForWidth()) self.tabWidget_PGMS.setSizePolicy(sizePolicy) self.tabWidget_PGMS.setMinimumSize(QtCore.QSize(800, 700)) self.tabWidget_PGMS.setLayoutDirection(QtCore.Qt.LeftToRight) self.tabWidget_PGMS.setAutoFillBackground(True) self.tabWidget_PGMS.setStyleSheet("") self.tabWidget_PGMS.setTabBarAutoHide(True) self.tabWidget_PGMS.setObjectName("tabWidget_PGMS") self.tab_Combination = QtWidgets.QWidget() self.tab_Combination.setObjectName("tab_Combination") self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.tab_Combination) self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.scrollArea_3 = QtWidgets.QScrollArea(self.tab_Combination) self.scrollArea_3.setWidgetResizable(True) self.scrollArea_3.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.scrollArea_3.setObjectName("scrollArea_3") self.scrollAreaWidgetContents_3 = QtWidgets.QWidget() self.scrollAreaWidgetContents_3.setGeometry(QtCore.QRect(0, 0, 852, 958)) self.scrollAreaWidgetContents_3.setObjectName("scrollAreaWidgetContents_3") self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_3) self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) self.verticalLayout_8.setObjectName("verticalLayout_8") self.verticalLayout_6 = QtWidgets.QVBoxLayout() self.verticalLayout_6.setObjectName("verticalLayout_6") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.verticalLayout_7 = QtWidgets.QVBoxLayout() self.verticalLayout_7.setObjectName("verticalLayout_7") self.label_7 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_7.setText("") self.label_7.setObjectName("label_7") self.verticalLayout_7.addWidget(self.label_7) self.label_10 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_10.sizePolicy().hasHeightForWidth()) self.label_10.setSizePolicy(sizePolicy) self.label_10.setObjectName("label_10") self.verticalLayout_7.addWidget(self.label_10) self.label_11 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_11.setObjectName("label_11") self.verticalLayout_7.addWidget(self.label_11) self.label_12 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_12.setObjectName("label_12") self.verticalLayout_7.addWidget(self.label_12) self.horizontalLayout_3.addLayout(self.verticalLayout_7) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.horizontalLayout_3.addItem(spacerItem1) self.gridLayout_5 = QtWidgets.QGridLayout() self.gridLayout_5.setObjectName("gridLayout_5") self.label_8 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_8.setObjectName("label_8") self.gridLayout_5.addWidget(self.label_8, 0, 0, 1, 1) self.label_9 = QtWidgets.QLabel(self.scrollAreaWidgetContents_3) self.label_9.setObjectName("label_9") self.gridLayout_5.addWidget(self.label_9, 0, 1, 1, 1) self.doubleSpinBox_returns_min = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.doubleSpinBox_returns_min.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_returns_min.setSizePolicy(sizePolicy) self.doubleSpinBox_returns_min.setMaximum(0.3) self.doubleSpinBox_returns_min.setSingleStep(0.01) self.doubleSpinBox_returns_min.setProperty("value", 0.0) self.doubleSpinBox_returns_min.setObjectName("doubleSpinBox_returns_min") self.gridLayout_5.addWidget(self.doubleSpinBox_returns_min, 1, 0, 1, 1) self.doubleSpinBox_returns_max = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.doubleSpinBox_returns_max.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_returns_max.setSizePolicy(sizePolicy) self.doubleSpinBox_returns_max.setMinimum(0.0) self.doubleSpinBox_returns_max.setMaximum(10.0) self.doubleSpinBox_returns_max.setSingleStep(0.1) self.doubleSpinBox_returns_max.setProperty("value", 0.0) self.doubleSpinBox_returns_max.setObjectName("doubleSpinBox_returns_max") self.gridLayout_5.addWidget(self.doubleSpinBox_returns_max, 1, 1, 1, 1) self.doubleSpinBox_maxdrawdown_min = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_3) self.doubleSpinBox_maxdrawdown_min.setMinimum(0.1) self.doubleSpinBox_maxdrawdown_min.setMaximum(1.0) self.doubleSpinBox_maxdrawdown_min.setSingleStep(0.01) self.doubleSpinBox_maxdrawdown_min.setProperty("value", 0.7) self.doubleSpinBox_maxdrawdown_min.setObjectName("doubleSpinBox_maxdrawdown_min") self.gridLayout_5.addWidget(self.doubleSpinBox_maxdrawdown_min, 2, 0, 1, 1) self.doubleSpinBox_maxdrawdown_max = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.doubleSpinBox_maxdrawdown_max.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_maxdrawdown_max.setSizePolicy(sizePolicy) self.doubleSpinBox_maxdrawdown_max.setMinimum(0.2) self.doubleSpinBox_maxdrawdown_max.setMaximum(1.0) self.doubleSpinBox_maxdrawdown_max.setSingleStep(0.01) self.doubleSpinBox_maxdrawdown_max.setProperty("value", 1.0) self.doubleSpinBox_maxdrawdown_max.setObjectName("doubleSpinBox_maxdrawdown_max") self.gridLayout_5.addWidget(self.doubleSpinBox_maxdrawdown_max, 2, 1, 1, 1) self.doubleSpinBox_sharp_min = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.doubleSpinBox_sharp_min.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_sharp_min.setSizePolicy(sizePolicy) self.doubleSpinBox_sharp_min.setMaximum(40.0) self.doubleSpinBox_sharp_min.setSingleStep(0.05) self.doubleSpinBox_sharp_min.setObjectName("doubleSpinBox_sharp_min") self.gridLayout_5.addWidget(self.doubleSpinBox_sharp_min, 3, 0, 1, 1) self.doubleSpinBox_sharp_max = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.doubleSpinBox_sharp_max.sizePolicy().hasHeightForWidth()) self.doubleSpinBox_sharp_max.setSizePolicy(sizePolicy) self.doubleSpinBox_sharp_max.setProperty("value", 10.0) self.doubleSpinBox_sharp_max.setObjectName("doubleSpinBox_sharp_max") self.gridLayout_5.addWidget(self.doubleSpinBox_sharp_max, 3, 1, 1, 1) self.horizontalLayout_3.addLayout(self.gridLayout_5) self.line_2 = QtWidgets.QFrame(self.scrollAreaWidgetContents_3) self.line_2.setFrameShape(QtWidgets.QFrame.VLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.horizontalLayout_3.addWidget(self.line_2) spacerItem2 = QtWidgets.QSpacerItem(200, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem2) self.pushButton_start_combination = QtWidgets.QPushButton(self.scrollAreaWidgetContents_3) self.pushButton_start_combination.setObjectName("pushButton_start_combination") self.horizontalLayout_3.addWidget(self.pushButton_start_combination) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem3) self.verticalLayout_6.addLayout(self.horizontalLayout_3) self.horizontalLayout_7 = QtWidgets.QHBoxLayout() self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.checkBox_stock = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_stock.setObjectName("checkBox_stock") self.horizontalLayout_7.addWidget(self.checkBox_stock) self.checkBox_compound = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_compound.setObjectName("checkBox_compound") self.horizontalLayout_7.addWidget(self.checkBox_compound) self.checkBox_future_manage = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_future_manage.setObjectName("checkBox_future_manage") self.horizontalLayout_7.addWidget(self.checkBox_future_manage) self.checkBox_event = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_event.setObjectName("checkBox_event") self.horizontalLayout_7.addWidget(self.checkBox_event) self.checkBox_bond = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_bond.setObjectName("checkBox_bond") self.horizontalLayout_7.addWidget(self.checkBox_bond) self.checkBox_macro = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_macro.setObjectName("checkBox_macro") self.horizontalLayout_7.addWidget(self.checkBox_macro) self.checkBox_combination_fund = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_combination_fund.setObjectName("checkBox_combination_fund") self.horizontalLayout_7.addWidget(self.checkBox_combination_fund) self.checkBox_relative_fund = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_relative_fund.setObjectName("checkBox_relative_fund") self.horizontalLayout_7.addWidget(self.checkBox_relative_fund) self.checkBox_others = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_3) self.checkBox_others.setObjectName("checkBox_others") self.horizontalLayout_7.addWidget(self.checkBox_others) self.verticalLayout_6.addLayout(self.horizontalLayout_7) self.verticalLayout_8.addLayout(self.verticalLayout_6) self.QWebEngineview_Combination_monte_markovitz = QWebEngineView(self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_monte_markovitz.setMinimumSize(QtCore.QSize(0, 300)) self.QWebEngineview_Combination_monte_markovitz.setStyleSheet("background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_monte_markovitz.setObjectName("QWebEngineview_Combination_monte_markovitz") self.verticalLayout_8.addWidget(self.QWebEngineview_Combination_monte_markovitz) self.horizontalLayout_5 = QtWidgets.QHBoxLayout() self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.QWebEngineview_Combination_Pie = QWebEngineView(self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_Pie.setMinimumSize(QtCore.QSize(50, 200)) self.QWebEngineview_Combination_Pie.setStyleSheet("background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_Pie.setObjectName("QWebEngineview_Combination_Pie") self.horizontalLayout_5.addWidget(self.QWebEngineview_Combination_Pie) self.QWebEngineview_Combination_Table = QWebEngineView(self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_Table.setMinimumSize(QtCore.QSize(0, 200)) self.QWebEngineview_Combination_Table.setStyleSheet("background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_Table.setObjectName("QWebEngineview_Combination_Table") self.horizontalLayout_5.addWidget(self.QWebEngineview_Combination_Table) self.verticalLayout_8.addLayout(self.horizontalLayout_5) self.QWebEngineview_Combination_Versus = QWebEngineView(self.scrollAreaWidgetContents_3) self.QWebEngineview_Combination_Versus.setEnabled(True) self.QWebEngineview_Combination_Versus.setMinimumSize(QtCore.QSize(0, 300)) self.QWebEngineview_Combination_Versus.setStyleSheet("background-color: rgb(170, 170, 127);") self.QWebEngineview_Combination_Versus.setObjectName("QWebEngineview_Combination_Versus") self.verticalLayout_8.addWidget(self.QWebEngineview_Combination_Versus) self.QWebEngineview_Combination_monte_markovitz.raise_() self.QWebEngineview_Combination_Versus.raise_() self.scrollArea_3.setWidget(self.scrollAreaWidgetContents_3) self.horizontalLayout_6.addWidget(self.scrollArea_3) self.tabWidget_PGMS.addTab(self.tab_Combination, "") self.verticalLayout_5.addWidget(self.tabWidget_PGMS) MainWindow.setCentralWidget(self.centralWidget) self.menuBar = QtWidgets.QMenuBar(MainWindow) self.menuBar.setGeometry(QtCore.QRect(0, 0, 913, 23)) self.menuBar.setObjectName("menuBar") MainWindow.setMenuBar(self.menuBar) self.action = QtWidgets.QAction(MainWindow) self.action.setObjectName("action") self.action_2 = QtWidgets.QAction(MainWindow) self.action_2.setObjectName("action_2") self.action_3 = QtWidgets.QAction(MainWindow) self.action_3.setObjectName("action_3") self.action_4 = QtWidgets.QAction(MainWindow) self.action_4.setObjectName("action_4") self.action_5 = QtWidgets.QAction(MainWindow) self.action_5.setObjectName("action_5") self.action_6 = QtWidgets.QAction(MainWindow) self.action_6.setObjectName("action_6") self.action_8 = QtWidgets.QAction(MainWindow) self.action_8.setObjectName("action_8") self.action_9 = QtWidgets.QAction(MainWindow) self.action_9.setObjectName("action_9") self.action_10 = QtWidgets.QAction(MainWindow) self.action_10.setObjectName("action_10") self.action_11 = QtWidgets.QAction(MainWindow) self.action_11.setObjectName("action_11") self.action_Qt = QtWidgets.QAction(MainWindow) self.action_Qt.setObjectName("action_Qt") self.action_PyQt = QtWidgets.QAction(MainWindow) self.action_PyQt.setObjectName("action_PyQt") self.action_12 = QtWidgets.QAction(MainWindow) self.action_12.setObjectName("action_12") self.retranslateUi(MainWindow) self.tabWidget_PGMS.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "基金量化投研系统v0.11")) self.label_10.setText(_translate("MainWindow", "收益")) self.label_11.setText(_translate("MainWindow", "最大回撤")) self.label_12.setText(_translate("MainWindow", "Sharp比")) self.label_8.setText(_translate("MainWindow", "最小范围")) self.label_9.setText(_translate("MainWindow", "最大范围")) self.pushButton_start_combination.setText(_translate("MainWindow", "开始")) self.checkBox_stock.setText(_translate("MainWindow", "股票策略")) self.checkBox_compound.setText(_translate("MainWindow", "复合策略")) self.checkBox_future_manage.setText(_translate("MainWindow", "管理期货")) self.checkBox_event.setText(_translate("MainWindow", "事件驱动")) self.checkBox_bond.setText(_translate("MainWindow", "债券策略")) self.checkBox_macro.setText(_translate("MainWindow", "宏观策略")) self.checkBox_combination_fund.setText(_translate("MainWindow", "组合基金")) self.checkBox_relative_fund.setText(_translate("MainWindow", "相对价值")) self.checkBox_others.setText(_translate("MainWindow", "其它策略")) self.tabWidget_PGMS.setTabText(self.tabWidget_PGMS.indexOf(self.tab_Combination), _translate("MainWindow", "产品组合管理")) self.action.setText(_translate("MainWindow", "打开")) self.action_2.setText(_translate("MainWindow", "关闭")) self.action_3.setText(_translate("MainWindow", "保存")) self.action_4.setText(_translate("MainWindow", "退出")) self.action_5.setText(_translate("MainWindow", "复制")) self.action_6.setText(_translate("MainWindow", "黏贴")) self.action_8.setText(_translate("MainWindow", "哈哈")) self.action_9.setText(_translate("MainWindow", "关于")) self.action_10.setText(_translate("MainWindow", "使用说明")) self.action_11.setText(_translate("MainWindow", "关于软件")) self.action_Qt.setText(_translate("MainWindow", "关于Qt")) self.action_PyQt.setText(_translate("MainWindow", "关于PyQt")) self.action_12.setText(_translate("MainWindow", "其他"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.scrollArea = QtWidgets.QScrollArea(self.centralwidget) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 780, 535)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.horizontalLayout_3 = QtWidgets.QHBoxLayout( self.scrollAreaWidgetContents) self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.widget_parameter_tree = QtWidgets.QWidget( self.scrollAreaWidgetContents) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget_parameter_tree.sizePolicy().hasHeightForWidth()) self.widget_parameter_tree.setSizePolicy(sizePolicy) self.widget_parameter_tree.setMinimumSize(QtCore.QSize(100, 0)) self.widget_parameter_tree.setObjectName("widget_parameter_tree") self.horizontalLayout_2.addWidget(self.widget_parameter_tree) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setObjectName("verticalLayout_3") self.QWebEngineView_ProductVsHs300 = QWebEngineView( self.scrollAreaWidgetContents) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.QWebEngineView_ProductVsHs300. sizePolicy().hasHeightForWidth()) self.QWebEngineView_ProductVsHs300.setSizePolicy(sizePolicy) self.QWebEngineView_ProductVsHs300.setMinimumSize(QtCore.QSize(0, 100)) self.QWebEngineView_ProductVsHs300.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineView_ProductVsHs300.setObjectName( "QWebEngineView_ProductVsHs300") self.verticalLayout_3.addWidget(self.QWebEngineView_ProductVsHs300) self.tabWidget = QtWidgets.QTabWidget(self.scrollAreaWidgetContents) self.tabWidget.setMinimumSize(QtCore.QSize(200, 200)) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.QWebEngineview_MonthReturn = QWebEngineView(self.tab) self.QWebEngineview_MonthReturn.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineview_MonthReturn.setObjectName( "QWebEngineview_MonthReturn") self.verticalLayout_2.addWidget(self.QWebEngineview_MonthReturn) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_2) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.QWebEngineView_PeriodReturn = QWebEngineView(self.tab_2) self.QWebEngineView_PeriodReturn.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineView_PeriodReturn.setObjectName( "QWebEngineView_PeriodReturn") self.horizontalLayout.addWidget(self.QWebEngineView_PeriodReturn) self.tabWidget.addTab(self.tab_2, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.verticalLayout = QtWidgets.QVBoxLayout(self.tab_3) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.QWebEngineView_LagestBack = QWebEngineView(self.tab_3) self.QWebEngineView_LagestBack.setStyleSheet( "background-color: rgb(170, 170, 127);") self.QWebEngineView_LagestBack.setObjectName( "QWebEngineView_LagestBack") self.verticalLayout.addWidget(self.QWebEngineView_LagestBack) self.tabWidget.addTab(self.tab_3, "") self.verticalLayout_3.addWidget(self.tabWidget) self.horizontalLayout_2.addLayout(self.verticalLayout_3) self.horizontalLayout_3.addLayout(self.horizontalLayout_2) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.horizontalLayout_4.addWidget(self.scrollArea) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(1) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "基金量化投研系统v0.11")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "月度收益")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "区间收益")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "回撤情况"))
class Ui_FieldSelector(object): def setupUi(self, FieldSelector): FieldSelector.setObjectName("FieldSelector") FieldSelector.resize(964, 923) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/images/images/selector.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) FieldSelector.setWindowIcon(icon) FieldSelector.setSizeGripEnabled(True) FieldSelector.setModal(True) self.gridLayout_2 = QtWidgets.QGridLayout(FieldSelector) self.gridLayout_2.setObjectName("gridLayout_2") self.webView = QWebView(FieldSelector) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.webView.sizePolicy().hasHeightForWidth()) self.webView.setSizePolicy(sizePolicy) self.webView.setMouseTracking(True) self.webView.setUrl(QtCore.QUrl("about:blank")) self.webView.setObjectName("webView") self.gridLayout_2.addWidget(self.webView, 1, 0, 1, 2) self.textualFrame = QtWidgets.QFrame(FieldSelector) self.textualFrame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.textualFrame.setFrameShadow(QtWidgets.QFrame.Raised) self.textualFrame.setObjectName("textualFrame") self.gridLayout_5 = QtWidgets.QGridLayout(self.textualFrame) self.gridLayout_5.setObjectName("gridLayout_5") self.label_4 = QtWidgets.QLabel(self.textualFrame) self.label_4.setFrameShape(QtWidgets.QFrame.NoFrame) self.label_4.setFrameShadow(QtWidgets.QFrame.Plain) self.label_4.setLineWidth(0) self.label_4.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.label_4.setObjectName("label_4") self.gridLayout_5.addWidget(self.label_4, 0, 0, 1, 1) self.textualComboBox = QtWidgets.QComboBox(self.textualFrame) self.textualComboBox.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.textualComboBox.sizePolicy().hasHeightForWidth()) self.textualComboBox.setSizePolicy(sizePolicy) self.textualComboBox.setEditable(False) self.textualComboBox.setDuplicatesEnabled(False) self.textualComboBox.setObjectName("textualComboBox") self.gridLayout_5.addWidget(self.textualComboBox, 0, 1, 1, 1) self.label_3 = QtWidgets.QLabel(self.textualFrame) self.label_3.setFrameShape(QtWidgets.QFrame.NoFrame) self.label_3.setFrameShadow(QtWidgets.QFrame.Raised) self.label_3.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.label_3.setObjectName("label_3") self.gridLayout_5.addWidget(self.label_3, 1, 0, 1, 1) self.textcolComboBox = QtWidgets.QComboBox(self.textualFrame) self.textcolComboBox.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.textcolComboBox.sizePolicy().hasHeightForWidth()) self.textcolComboBox.setSizePolicy(sizePolicy) self.textcolComboBox.setEditable(True) self.textcolComboBox.setObjectName("textcolComboBox") self.gridLayout_5.addWidget(self.textcolComboBox, 1, 1, 1, 1) self.gridLayout_2.addWidget(self.textualFrame, 4, 0, 1, 1) self.url = QtWidgets.QLineEdit(FieldSelector) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.url.sizePolicy().hasHeightForWidth()) self.url.setSizePolicy(sizePolicy) self.url.setReadOnly(True) self.url.setObjectName("url") self.gridLayout_2.addWidget(self.url, 0, 0, 1, 2) self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.tagCheckBox = QtWidgets.QCheckBox(FieldSelector) self.tagCheckBox.setEnabled(False) font = QtGui.QFont() font.setPointSize(9) self.tagCheckBox.setFont(font) self.tagCheckBox.setChecked(True) self.tagCheckBox.setObjectName("tagCheckBox") self.gridLayout.addWidget(self.tagCheckBox, 4, 1, 1, 1) self.idCheckBox = QtWidgets.QCheckBox(FieldSelector) self.idCheckBox.setEnabled(False) font = QtGui.QFont() font.setPointSize(9) self.idCheckBox.setFont(font) self.idCheckBox.setChecked(True) self.idCheckBox.setObjectName("idCheckBox") self.gridLayout.addWidget(self.idCheckBox, 4, 2, 1, 1) self.classCheckBox = QtWidgets.QCheckBox(FieldSelector) self.classCheckBox.setEnabled(False) font = QtGui.QFont() font.setPointSize(9) self.classCheckBox.setFont(font) self.classCheckBox.setChecked(True) self.classCheckBox.setObjectName("classCheckBox") self.gridLayout.addWidget(self.classCheckBox, 4, 3, 1, 1) self.numElecomboBox = QtWidgets.QComboBox(FieldSelector) self.numElecomboBox.setEnabled(False) self.numElecomboBox.setObjectName("numElecomboBox") self.numElecomboBox.addItem("") self.gridLayout.addWidget(self.numElecomboBox, 4, 5, 1, 1) self.backButton = QtWidgets.QPushButton(FieldSelector) self.backButton.setMaximumSize(QtCore.QSize(100, 16777215)) self.backButton.setAutoDefault(False) self.backButton.setDefault(False) self.backButton.setObjectName("backButton") self.gridLayout.addWidget(self.backButton, 4, 6, 1, 1) self.nextButton = QtWidgets.QPushButton(FieldSelector) self.nextButton.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.nextButton.sizePolicy().hasHeightForWidth()) self.nextButton.setSizePolicy(sizePolicy) self.nextButton.setMaximumSize(QtCore.QSize(100, 16777215)) self.nextButton.setFocusPolicy(QtCore.Qt.StrongFocus) self.nextButton.setCheckable(False) self.nextButton.setChecked(False) self.nextButton.setAutoDefault(False) self.nextButton.setFlat(False) self.nextButton.setObjectName("nextButton") self.gridLayout.addWidget(self.nextButton, 4, 7, 1, 1) self.additionTagLineEdit = QtWidgets.QLineEdit(FieldSelector) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.additionTagLineEdit.sizePolicy().hasHeightForWidth()) self.additionTagLineEdit.setSizePolicy(sizePolicy) self.additionTagLineEdit.setObjectName("additionTagLineEdit") self.gridLayout.addWidget(self.additionTagLineEdit, 4, 4, 1, 1) self.gridLayout_2.addLayout(self.gridLayout, 2, 0, 1, 2) self.sourceText = QtWidgets.QPlainTextEdit(FieldSelector) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.sourceText.sizePolicy().hasHeightForWidth()) self.sourceText.setSizePolicy(sizePolicy) self.sourceText.setObjectName("sourceText") self.gridLayout_2.addWidget(self.sourceText, 3, 0, 1, 2) self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3.setObjectName("gridLayout_3") self.state = QtWidgets.QLabel(FieldSelector) self.state.setText("") self.state.setObjectName("state") self.gridLayout_3.addWidget(self.state, 0, 0, 1, 1) self.warnLabel = QtWidgets.QLabel(FieldSelector) self.warnLabel.setMinimumSize(QtCore.QSize(0, 20)) self.warnLabel.setText("") self.warnLabel.setObjectName("warnLabel") self.gridLayout_3.addWidget(self.warnLabel, 1, 0, 1, 1) self.progressBar = QtWidgets.QProgressBar(FieldSelector) self.progressBar.setMaximumSize(QtCore.QSize(16777215, 30)) font = QtGui.QFont() font.setPointSize(11) self.progressBar.setFont(font) self.progressBar.setProperty("value", 0) self.progressBar.setObjectName("progressBar") self.gridLayout_3.addWidget(self.progressBar, 2, 0, 1, 1) self.gridLayout_2.addLayout(self.gridLayout_3, 5, 0, 1, 2) self.extractFrame = QtWidgets.QFrame(FieldSelector) self.extractFrame.setEnabled(False) self.extractFrame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.extractFrame.setFrameShadow(QtWidgets.QFrame.Raised) self.extractFrame.setObjectName("extractFrame") self.gridLayout_7 = QtWidgets.QGridLayout(self.extractFrame) self.gridLayout_7.setObjectName("gridLayout_7") self.widget = QtWidgets.QWidget(self.extractFrame) self.widget.setObjectName("widget") self.gridLayout_4 = QtWidgets.QGridLayout(self.widget) self.gridLayout_4.setObjectName("gridLayout_4") self.textExtraction = QtWidgets.QRadioButton(self.widget) self.textExtraction.setEnabled(False) self.textExtraction.setChecked(True) self.textExtraction.setObjectName("textExtraction") self.gridLayout_4.addWidget(self.textExtraction, 0, 0, 1, 1) self.sourceExtraction = QtWidgets.QRadioButton(self.widget) self.sourceExtraction.setObjectName("sourceExtraction") self.gridLayout_4.addWidget(self.sourceExtraction, 1, 0, 1, 1) self.gridLayout_7.addWidget(self.widget, 0, 0, 1, 1) self.widget_2 = QtWidgets.QWidget(self.extractFrame) self.widget_2.setObjectName("widget_2") self.gridLayout_6 = QtWidgets.QGridLayout(self.widget_2) self.gridLayout_6.setObjectName("gridLayout_6") self.selectedExtraction = QtWidgets.QRadioButton(self.widget_2) self.selectedExtraction.setChecked(True) self.selectedExtraction.setObjectName("selectedExtraction") self.gridLayout_6.addWidget(self.selectedExtraction, 0, 0, 1, 1) self.inverseExtraction = QtWidgets.QRadioButton(self.widget_2) self.inverseExtraction.setObjectName("inverseExtraction") self.gridLayout_6.addWidget(self.inverseExtraction, 1, 0, 1, 1) self.gridLayout_7.addWidget(self.widget_2, 0, 1, 1, 1) self.newcolumnButton = QtWidgets.QPushButton(self.extractFrame) self.newcolumnButton.setEnabled(False) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.newcolumnButton.sizePolicy().hasHeightForWidth()) self.newcolumnButton.setSizePolicy(sizePolicy) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(":/images/images/newColumn.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.newcolumnButton.setIcon(icon1) self.newcolumnButton.setIconSize(QtCore.QSize(36, 36)) self.newcolumnButton.setAutoDefault(True) self.newcolumnButton.setFlat(False) self.newcolumnButton.setObjectName("newcolumnButton") self.gridLayout_7.addWidget(self.newcolumnButton, 0, 2, 1, 1) self.gridLayout_2.addWidget(self.extractFrame, 4, 1, 1, 1) self.sourceText.raise_() self.textualFrame.raise_() self.url.raise_() self.webView.raise_() self.extractFrame.raise_() self.label_4.setBuddy(self.textualComboBox) self.label_3.setBuddy(self.textcolComboBox) self.retranslateUi(FieldSelector) QtCore.QMetaObject.connectSlotsByName(FieldSelector) def retranslateUi(self, FieldSelector): _translate = QtCore.QCoreApplication.translate FieldSelector.setWindowTitle( _translate("FieldSelector", "Gromoteur - Field Selector")) self.webView.setStatusTip( _translate( "FieldSelector", "click to select desired content, scroll with mouse wheel")) self.label_4.setText( _translate("FieldSelector", "Te&xtualization Name:")) self.label_3.setText(_translate("FieldSelector", "Column &Name:")) self.tagCheckBox.setText(_translate("FieldSelector", "tag")) self.idCheckBox.setText(_translate("FieldSelector", "id")) self.classCheckBox.setText(_translate("FieldSelector", "class")) self.numElecomboBox.setItemText(0, _translate("FieldSelector", "all")) self.backButton.setText(_translate("FieldSelector", "previous")) self.nextButton.setText(_translate("FieldSelector", "next")) self.additionTagLineEdit.setToolTip( _translate("FieldSelector", "additional tag")) self.textExtraction.setText(_translate("FieldSelector", "text")) self.sourceExtraction.setText(_translate("FieldSelector", "source")) self.selectedExtraction.setText( _translate("FieldSelector", "se&lected")) self.inverseExtraction.setText(_translate("FieldSelector", "in&verse")) self.newcolumnButton.setText( _translate("FieldSelector", "extract\n" "into separate column"))