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 Gui(QtWidgets.QWidget): # Table 위젯과 WebEngine 위젯을 포함하는 pyqt 클래스 def __init__(self, db_path1, db_path2): super().__init__() print('Creating Layout...') # Layout self.setWindowTitle('Finance') self.grid = QtWidgets.QGridLayout() self.setLayout(self.grid) self.resize(1870, 850) self.center() # Btn self.btn1 = QtWidgets.QPushButton('running', self) self.btn1.clicked.connect(self.push_btn) # WebEngine self.browser = QWebEngineView() self.browser.setMaximumSize(1200, 1080) # Table self.table = QtWidgets.QTableWidget(self) self.table.setMaximumSize(670, 1080) self.table.setAutoScroll(False) self.table.setRowCount(0) self.table.setColumnCount(7) self.table.setColumnWidth(0, 400) self.table.setColumnWidth(1, 60) self.table.setColumnWidth(2, 60) self.table.setColumnWidth(3, 100) self.table.setColumnWidth(4, 60) self.table.setColumnWidth(5, 60) self.table.setColumnWidth(6, 10) self.table.setHorizontalHeaderLabels([ 'Title', 'Displayed', 'Created', 'Category', 'Summary', 'Date', 'NewsId' ]) self.table.cellClicked.connect(self.click_news) print('Setting Thread...') # Thread 생성 self.news_thread = NewsThread(db_path1) self.disclosure_thread = DisclosureThread(db_path2) self.init_table() # 처음에만 테이블에 정보 넣기 # Thread 시그널 생성 및 시작 self.news_thread.get_news_signal.connect(self.update_table) self.disclosure_thread.get_disclosure_signal.connect( self.update_table2) self.news_thread.start() self.disclosure_thread.start() self.is_run = True # Grid self.grid.addWidget(self.table, 0, 0) self.grid.addWidget(self.browser, 0, 1) self.grid.addWidget(self.btn1, 1, 0, 1, 2) print('All Completed') self.show() def center(self): # 창 가운데로 설정 qr = self.frameGeometry() cp = QtWidgets.QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) @pyqtSlot() def push_btn(self): # 쓰레드 시작 / 정지 slot 함수 if self.news_thread.is_run and self.disclosure_thread.is_run: self.news_thread.is_run = False self.disclosure_thread.is_run = False else: self.news_thread.is_run = True self.disclosure_thread.is_run = True def init_table(self): # 공시크롤링 init_d_list = self.disclosure_thread.disclosure.get_new_data() self.disclosure_thread.disclosure.put_list_to_db(init_d_list) # 뉴스크롤링 init_news = self.news_thread.get_news.get_page_list(FIRST_GET_NEWS_NUM) self.news_thread.get_news.put_list_to_db(init_news) # 테이블 삽입 self.put_news_to_table(init_news) self.put_d_list_to_table(init_d_list) # 정렬 self.table.sortItems(5, Qt.DescendingOrder) self.table.selectRow(0) self.click_news() def put_news_to_table(self, news_list): # 테이블에 뉴스크롤링 정보 삽입 for category in self.news_thread.get_news.categories: for data in reversed(news_list[category]): if data is not None: now = time.localtime() now_time = f'{now.tm_hour:02}:{now.tm_min:02}:{now.tm_sec:02}' self.table.insertRow(0) self.table.setItem( 0, 0, QtWidgets.QTableWidgetItem(data['title'])) self.table.setItem(0, 1, QtWidgets.QTableWidgetItem(now_time)) self.table.setItem( 0, 2, QtWidgets.QTableWidgetItem( data['createdAt'].split(' ')[-1])) self.table.setItem(0, 3, QtWidgets.QTableWidgetItem(category)) self.table.setItem( 0, 4, QtWidgets.QTableWidgetItem(data['summary'])) self.table.setItem( 0, 5, QtWidgets.QTableWidgetItem(data['createdAt'])) self.table.setItem( 0, 6, QtWidgets.QTableWidgetItem(data['newsId'])) self.table.setRowHeight(0, 30) self.table.scrollToTop() def put_d_list_to_table(self, d_list): # 테이블에 공시크롤링 정보 삽입 for category in self.disclosure_thread.disclosure.categories: for data in reversed(d_list[category]): if data is not None: now = time.localtime() now_time = f'{now.tm_hour:02}:{now.tm_min:02}:{now.tm_sec:02}' self.table.insertRow(0) self.table.setItem( 0, 0, QtWidgets.QTableWidgetItem(data['title'])) self.table.setItem(0, 1, QtWidgets.QTableWidgetItem(now_time)) self.table.setItem( 0, 2, QtWidgets.QTableWidgetItem(data['time'])) self.table.setItem( 0, 3, QtWidgets.QTableWidgetItem(data['company'])) self.table.setItem( 0, 4, QtWidgets.QTableWidgetItem(data['market'])) self.table.setItem( 0, 5, QtWidgets.QTableWidgetItem(data['date'])) self.table.setItem( 0, 6, QtWidgets.QTableWidgetItem(data['report'])) self.table.setRowHeight(0, 30) self.table.item(0, 0).setBackground(QColor(100, 255, 0)) self.table.item(0, 3).setBackground(QColor(100, 255, 0)) self.table.scrollToTop() @pyqtSlot(dict) def update_table(self, news_list): # 뉴스 정보 딕셔너리를 받아 테이블 업데이트 self.btn1.setText('Received News List') self.put_news_to_table(news_list) row_count = self.table.rowCount() if row_count > TABLE_ROW_LIMIT: for i in reversed(range(TABLE_DELETE_TO, row_count)): self.table.removeRow(i) @pyqtSlot(dict) def update_table2(self, d_list): # 공시 정보 업데이트 self.btn1.setText('Received Disclosure List') self.put_d_list_to_table(d_list) row_count = self.table.rowCount() if row_count > TABLE_ROW_LIMIT: for i in reversed(range(TABLE_DELETE_TO, row_count)): self.table.removeRow(i) @pyqtSlot() def click_news(self): # 뉴스를 클릭할 경우 웹브라우저에 내용 표시 current_row = self.table.currentRow() self.table.selectRow(current_row) news_id = self.table.item(current_row, 6).text() if news_id[:4] == 'http': self.browser.setUrl(QUrl(news_id)) else: try: res = requests.get('https://finance.daum.net/content/news/' + news_id, headers=self.news_thread.get_news.header) except Exception as e: print(e) json = res.json() html = '<h3>' + json['title'] + '</h3>\n' + '<div>' + json[ 'createdAt'] + '</div>' + json['content'] self.browser.setHtml(html)
class MainUi(Ui_Main_2): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setObjectName("InterFace_1") self.resize(1300, 900) #设置整个界面的大小、背景 1100, 680 #背景图 self.setStyleSheet("#InterFace_1{border-image:url(./image/background.png)}") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.label = QtWidgets.QLabel() self.label.setMinimumSize(QtCore.QSize(0, 70)) self.label.setMaximumSize(QtCore.QSize(85, 70)) self.label = QtWidgets.QLabel("晨曦识别") font = QtGui.QFont() font.setFamily("微软雅黑") font.setPointSize(22) self.label.setFont(font) self.label.setStyleSheet("#label{border-image:url(./image/total_title.png);color:rgb(0, 255, 255)}") self.label.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop) self.label.setObjectName("label") #上方标题 :居中,字体类型、大小 self.main_widget = QtWidgets.QWidget() # 创建窗口主部件 self.main_layout = QtWidgets.QGridLayout() # 创建主部件的网格布局 self.main_widget.setLayout(self.main_layout) # 设置窗口主部件布局为网格布局 self.up_widget = QtWidgets.QWidget() # 创建上侧部件 self.up_widget.setObjectName('up_widget') self.up_layout = QtWidgets.QGridLayout() self.up_widget.setLayout(self.up_layout) # 设置上侧部件布局为网格 self.up_layout.addWidget(self.label, 0, 0, 3, 13) self.left_widget = QtWidgets.QWidget() # 创建左侧部件 self.left_widget.setObjectName('left_widget') self.left_layout = QtWidgets.QGridLayout() # 创建左侧部件的网格布局层 self.left_widget.setLayout(self.left_layout) # 设置左侧部件布局为网格 self.right_widget = QtWidgets.QWidget() # 创建右侧部件 self.right_widget.setObjectName('right_widget') self.right_layout = QtWidgets.QGridLayout() self.right_widget.setLayout(self.right_layout) # 设置右侧部件布局为网格 self.right_widget_2 = QtWidgets.QWidget() # 创建部件 self.right_widget_2.setObjectName('right_widget_2') self.right_layout_2 = QtWidgets.QGridLayout() self.right_widget_3 = QtWidgets.QWidget() # 创建部件 self.right_widget_3.setObjectName('right_widget_3') self.right_layout_3 = QtWidgets.QGridLayout() self.main_layout.addWidget(self.up_widget, 0, 0, 3, 13) self.main_layout.addWidget(self.right_widget, 4, 0, 2, 13) # (0,0,12,2)左侧部件在第0行第0列,占14行2列 总共12列, self.setCentralWidget(self.main_widget) # 设置窗口主部件 self.up_widget1 = QWebEngineView() # 创建上侧部件 self.up_widget1.setObjectName('up_widget1') self.up_widget1.setMinimumSize(QtCore.QSize(20, 0)) self.up_widget1.setMaximumSize(QtCore.QSize(70, 40)) self.up_widget1.page().setBackgroundColor(QColor('transparent')) self.main_layout.addWidget(self.up_widget1,0, 12, 3, 1) self.up_button_1 = QtWidgets.QPushButton("") self.up_button_1.setObjectName('up') self.up_button_3 = QtWidgets.QPushButton("") self.up_button_3.setObjectName('up') self.up_button_1.setIcon(QIcon(QPixmap('xiaobiao/minus5.png'))) self.up_button_3.setIcon(QIcon(QPixmap('xiaobiao/times5.png'))) self.g = 0 #全屏 正常 记录 self.h = 0 #收 正常 记录 self.up_button_3.clicked.connect(self.close) #关闭窗口 self.up_button_1.clicked.connect(self.show_2) self.up_button_1.setFixedSize(70, 40) self.up_button_3.setFixedSize(50, 40) self.main_layout.addWidget(self.up_button_1, 0, 11, 3, 1) self.main_layout.addWidget(self.up_button_3, 0, 12, 3, 1) self.main_widget.setStyleSheet(''' #up { font-family:KaiTi; font-size:17px; font-weight:200; border:none;} ''') # 然后再以电子病历确定开始功能 self.x_1 = Ui_Main_2() self.right_widget_2.setStyleSheet(''' background:#082E54; ''') self.right_layout_2.addWidget(self.x_1, 5, 0, 27, 13) self.right_widget_2.setLayout(self.right_layout_2) # 设置右侧部件布局为网格 self.main_layout.addWidget(self.right_widget_2, 5, 0, 27, 13) self.right_widget_2.show() self.setWindowOpacity(1) # 设置窗口透明度 self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # 隐藏边框 self.main_layout.setSpacing(0) def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: self.m_flag = True self.m_Position = event.globalPos() - self.pos() # 获取鼠标相对窗口的位置 event.accept() self.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor)) # 更改鼠标图标 def mouseMoveEvent(self, QMouseEvent): if QtCore.Qt.LeftButton and self.m_flag: self.move(QMouseEvent.globalPos() - self.m_Position) # 更改窗口位置 QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_flag = False self.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) def show_1(self): self.g +=1 x = self.g%2 if (x== 1): self.showNormal() else: self.showMaximized() def show_2(self): self.h +=1 h = self.h%2 if (h == 1): self.showMinimized() else: self.showMinimized()
class Ui_mainForm(object): def setupUi(self, mainForm): mainForm.setObjectName("mainForm") mainForm.resize(1200, 880) self.gridLayout_2 = QtWidgets.QGridLayout(mainForm) self.gridLayout_2.setContentsMargins(0, 0, 0, 0) self.gridLayout_2.setSpacing(0) self.gridLayout_2.setObjectName("gridLayout_2") self.browser = QWebEngineView(mainForm) self.browser.setMinimumSize(QtCore.QSize(0, 500)) self.browser.setMaximumSize(QtCore.QSize(16777215, 800)) self.browser.setObjectName("browser") self.gridLayout_2.addWidget(self.browser, 1, 0, 1, 2) self.console_secondary = QtWidgets.QTextEdit(mainForm) self.console_secondary.setMinimumSize(QtCore.QSize(0, 190)) self.console_secondary.setMaximumSize(QtCore.QSize(16777215, 190)) self.console_secondary.setStyleSheet("color: rgb(255, 255, 255);\n" "background-color: rgb(0, 0, 0);\n" "font: 12pt \"微软雅黑\";") self.console_secondary.setObjectName("console_secondary") self.gridLayout_2.addWidget(self.console_secondary, 5, 1, 1, 1) self.console_main = QtWidgets.QTextEdit(mainForm) self.console_main.setMinimumSize(QtCore.QSize(0, 190)) self.console_main.setMaximumSize(QtCore.QSize(16777215, 190)) self.console_main.setStyleSheet("color: rgb(255, 255, 255);\n" "background-color: rgb(0, 0, 0);\n" "font: 12pt \"微软雅黑\";") self.console_main.setObjectName("console_main") self.gridLayout_2.addWidget(self.console_main, 5, 0, 1, 1) self.widgetBar = QtWidgets.QWidget(mainForm) self.widgetBar.setMinimumSize(QtCore.QSize(0, 30)) self.widgetBar.setMaximumSize(QtCore.QSize(16777215, 30)) self.widgetBar.setObjectName("widgetBar") self.gridLayout = QtWidgets.QGridLayout(self.widgetBar) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setSpacing(0) self.gridLayout.setObjectName("gridLayout") self.btnBack = QtWidgets.QPushButton(self.widgetBar) self.btnBack.setMinimumSize(QtCore.QSize(0, 30)) self.btnBack.setObjectName("btnBack") self.gridLayout.addWidget(self.btnBack, 0, 3, 1, 1) self.urlBar = QtWidgets.QLineEdit(self.widgetBar) self.urlBar.setStyleSheet("font: 12pt \"微软雅黑\";") self.urlBar.setText("") self.urlBar.setReadOnly(True) self.urlBar.setObjectName("urlBar") self.gridLayout.addWidget(self.urlBar, 0, 1, 1, 1) self.btnCopyLink = QtWidgets.QPushButton(self.widgetBar) self.btnCopyLink.setMinimumSize(QtCore.QSize(0, 30)) self.btnCopyLink.setObjectName("btnCopyLink") self.gridLayout.addWidget(self.btnCopyLink, 0, 0, 1, 1) self.btnHome = QtWidgets.QPushButton(self.widgetBar) self.btnHome.setMinimumSize(QtCore.QSize(0, 30)) self.btnHome.setObjectName("btnHome") self.gridLayout.addWidget(self.btnHome, 0, 2, 1, 1) self.gridLayout_2.addWidget(self.widgetBar, 0, 0, 1, 2) self.widgetTools = QtWidgets.QWidget(mainForm) self.widgetTools.setMinimumSize(QtCore.QSize(0, 30)) self.widgetTools.setMaximumSize(QtCore.QSize(16777215, 30)) self.widgetTools.setStyleSheet("") self.widgetTools.setObjectName("widgetTools") self.gridLayout_3 = QtWidgets.QGridLayout(self.widgetTools) self.gridLayout_3.setContentsMargins(0, 0, 0, 0) self.gridLayout_3.setSpacing(0) self.gridLayout_3.setObjectName("gridLayout_3") self.btnGetAllLinks = QtWidgets.QPushButton(self.widgetTools) self.btnGetAllLinks.setEnabled(False) self.btnGetAllLinks.setMinimumSize(QtCore.QSize(0, 30)) self.btnGetAllLinks.setMaximumSize(QtCore.QSize(16777215, 30)) self.btnGetAllLinks.setObjectName("btnGetAllLinks") self.gridLayout_3.addWidget(self.btnGetAllLinks, 0, 0, 1, 1) self.btnOpenSource = QtWidgets.QPushButton(self.widgetTools) self.btnOpenSource.setMinimumSize(QtCore.QSize(0, 30)) self.btnOpenSource.setMaximumSize(QtCore.QSize(16777215, 30)) self.btnOpenSource.setObjectName("btnOpenSource") self.gridLayout_3.addWidget(self.btnOpenSource, 0, 2, 1, 1) self.lblLastPlayEpisodeName = QtWidgets.QLabel(self.widgetTools) self.lblLastPlayEpisodeName.setObjectName("lblLastPlayEpisodeName") self.gridLayout_3.addWidget(self.lblLastPlayEpisodeName, 0, 5, 1, 1) self.lblSpace02 = QtWidgets.QLabel(self.widgetTools) self.lblSpace02.setText("") self.lblSpace02.setObjectName("lblSpace02") self.gridLayout_3.addWidget(self.lblSpace02, 0, 8, 1, 1) self.lblLastPlay = QtWidgets.QLabel(self.widgetTools) self.lblLastPlay.setObjectName("lblLastPlay") self.gridLayout_3.addWidget(self.lblLastPlay, 0, 4, 1, 1) self.btnAbout = QtWidgets.QPushButton(self.widgetTools) self.btnAbout.setMinimumSize(QtCore.QSize(0, 30)) self.btnAbout.setMaximumSize(QtCore.QSize(16777215, 30)) self.btnAbout.setObjectName("btnAbout") self.gridLayout_3.addWidget(self.btnAbout, 0, 1, 1, 1) self.lblLastPlayEpisodeNum = QtWidgets.QLabel(self.widgetTools) self.lblLastPlayEpisodeNum.setObjectName("lblLastPlayEpisodeNum") self.gridLayout_3.addWidget(self.lblLastPlayEpisodeNum, 0, 7, 1, 1) spacerItem = QtWidgets.QSpacerItem(828, 27, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_3.addItem(spacerItem, 0, 3, 1, 1) self.lblSpace01 = QtWidgets.QLabel(self.widgetTools) self.lblSpace01.setObjectName("lblSpace01") self.gridLayout_3.addWidget(self.lblSpace01, 0, 6, 1, 1) self.gridLayout_2.addWidget(self.widgetTools, 2, 0, 1, 2) self.retranslateUi(mainForm) QtCore.QMetaObject.connectSlotsByName(mainForm) def retranslateUi(self, mainForm): _translate = QtCore.QCoreApplication.translate mainForm.setWindowTitle(_translate("mainForm", "看番神器 V1.0")) self.console_main.setHtml(_translate("mainForm", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" "</style></head><body style=\" font-family:\'微软雅黑\'; font-size:12pt; font-weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>")) self.btnBack.setText(_translate("mainForm", "返回")) self.btnCopyLink.setText(_translate("mainForm", "复制链接")) self.btnHome.setText(_translate("mainForm", "主页")) self.btnGetAllLinks.setText(_translate("mainForm", "抓取链接")) self.btnOpenSource.setText(_translate("mainForm", "项目地址")) self.lblLastPlayEpisodeName.setText(_translate("mainForm", "无")) self.lblLastPlay.setText(_translate("mainForm", "最近一次播放:")) self.btnAbout.setText(_translate("mainForm", "关于")) self.lblLastPlayEpisodeNum.setText(_translate("mainForm", "第0集")) self.lblSpace01.setText(_translate("mainForm", " "))