ESC 키를 눌러도 이전 html 파일의 내용을 복사하고, 붙여넣기가 되었거든요...
여러분이 코드를 사용해 보시고, 정상적으로 동작하면 좋겠군요.. ^ ^
누구나 복사할 수 있고, 누구나 수정할 수 있고, 누구나 남에게 줄 수 있고, 심지어 프로그램을 만들어서 판매하셔도 됩니다. ^ ^
import sys
import os
import pyperclip
import pyautogui
import time
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QFileDialog, QLabel, QHBoxLayout
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl, QSettings, QEventLoop
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QShortcut, QSizePolicy
class HtmlViewer(QWidget):
def __init__(self):
super().__init__()
self.settings = QSettings("MyCompany", "Novel9")
self.setWindowTitle('Novel 9')
self.setFixedSize(500, 1080)
self.move(1420, 0)
self.layout = QVBoxLayout()
self.top_layout = QHBoxLayout()
self.folder_button = QPushButton('폴더 선택', self)
self.folder_button.setFixedSize(150, 30)
self.folder_button.clicked.connect(self.select_folder)
self.top_layout.addWidget(self.folder_button)
self.file_name_label = QLabel('상위 폴더/파일 이름이 여기에 표시됩니다.', self)
self.top_layout.addWidget(self.file_name_label)
self.prev_button = QPushButton('이전 파일', self)
self.prev_button.setFixedSize(80, 30)
self.prev_button.clicked.connect(self.prev_html)
self.top_layout.addWidget(self.prev_button)
self.top_widget = QWidget()
self.top_widget.setFixedHeight(40)
self.top_widget.setLayout(self.top_layout)
self.layout.addWidget(self.top_widget)
self.browser = QWebEngineView()
self.browser.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.layout.addWidget(self.browser)
self.file_list = []
self.index = 0
self.current_load_id = None # 현재 로드 중인 파일의 ID
self.shortcut = QShortcut(QKeySequence('Esc'), self)
self.shortcut.activated.connect(self.next_html)
self.setLayout(self.layout)
self.load_default_folder()
def select_folder(self):
folder_path = QFileDialog.getExistingDirectory(self, '폴더 선택', os.getenv('HOME'))
if folder_path:
self.settings.setValue("defaultFolder", folder_path)
self.load_folder(folder_path)
def load_folder(self, folder_path):
self.file_list = [f for f in os.listdir(folder_path) if f.endswith('.html')]
self.file_list = [os.path.join(folder_path, f) for f in self.file_list]
self.index = 0
if self.file_list:
self.load_html(self.file_list[self.index])
def load_default_folder(self):
folder_path = self.settings.value("defaultFolder")
if folder_path and os.path.exists(folder_path):
self.load_folder(folder_path)
else:
print("Default folder not found, opening folder selection dialog.")
self.select_folder()
def load_html(self, file_path):
self.current_load_id = file_path # 현재 로드중인 파일 ID 설정
directory, filename = os.path.split(file_path)
parent_directory = os.path.basename(directory)
self.file_name_label.setText(f"{parent_directory}/{filename}")
try:
self.browser.page().loadFinished.disconnect()
except TypeError:
pass
url = QUrl.fromLocalFile(file_path)
self.browser.setUrl(url)
# 페이지 로드 완료 시 select_and_copy_after_load 호출
self.browser.page().loadFinished.connect(self.select_and_copy_after_load)
def select_and_copy_after_load(self):
#self.select_and_copy(True) # loadFinished 시그널 없이 바로 호출하므로 항상 성공으로 간주합니다.
if self.browser.url().isEmpty():
print("Browser URL is empty. Skipping select and copy.")
return
self.select_and_copy()
def select_and_copy(self):
select_all_js = "document.execCommand('selectAll');"
self.browser.page().runJavaScript(select_all_js, self.copy_to_clipboard)
def copy_to_clipboard(self, result):
self.browser.page().toPlainText(self.store_to_clipboard)
def store_to_clipboard(self, text):
if text:
pyperclip.copy(text)
print("Content copied to clipboard.")
self.perform_chrome_actions()
else:
print("No content selected.")
def clear_clipboard(self):
pyperclip.copy('')
def perform_chrome_actions(self):
time.sleep(0.5)
pyautogui.moveTo(317, 992)
pyautogui.click()
time.sleep(0.5)
pyautogui.hotkey('ctrl', 'v')
time.sleep(0.5)
pyautogui.moveTo(1060, 992)
pyautogui.click()
self.clear_clipboard()
def next_html(self):
self.clear_clipboard()
time.sleep(0.1)
self.index += 1
if self.index >= len(self.file_list):
self.index = 0
self.load_html(self.file_list[self.index])
def prev_html(self):
self.clear_clipboard()
time.sleep(0.5)
self.index -= 1
if self.index < 0:
self.index = len(self.file_list) - 1
self.load_html(self.file_list[self.index])
if __name__ == '__main__':
app = QApplication(sys.argv)
viewer = HtmlViewer()
viewer.show()
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.