디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[free] novel 9을 또 수정했습니다

몬발켜갤로그로 이동합니다. 2025.02.27 06:33:14
조회 17 추천 0 댓글 0

기존에 사용하던 코드는 완벽한 동작을 보장하지 않았습니다. 

ESC 키를 눌러도 이전 html 파일의 내용을 복사하고, 붙여넣기가 되었거든요...


고치고 싶어도 원인을 알 수가 없었습니다. 

그래서 할 수 없이 윈도 운영체제의 클립보드를 비우는 명령문을 몇 차례 삽입하는 방법을 썼죠. 


그런데 이번에 chatGPT 대신에 구글 제미나이 플래시 2.0에게 오류를 설명했더니

여러 가지 가능성을 제시하면서 해결책을 가르쳐 주더군요. 

저는 봐도 모르니까, 그냥 해결책대로 코드를 만들라고 명령했습니다. 

여러분이 코드를 사용해 보시고, 정상적으로 동작하면 좋겠군요.. ^ ^


언제나 하는 말이지만, 이 코드는 퍼블릭 도메인입니다. 

누구나 복사할 수 있고, 누구나 수정할 수 있고, 누구나 남에게 줄 수 있고, 심지어 프로그램을 만들어서 판매하셔도 됩니다. ^ ^ 



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()

    sys.exit(app.exec_()) 

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 현역으로 군대 안 간게 의아한 스타는? 운영자 25/06/30 - -
- AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
1 공지 프로그램 소스 코드의 공유/수정/판매 [2] 몬발켜갤로그로 이동합니다. 24.12.24 279 2
20 fre 빨간 공 파란 공 랜덤으로 그리는 프로그램 몬발켜갤로그로 이동합니다. 05.15 20 0
19 fre textmovie -자막만 있는 동영상 [2] 몬발켜갤로그로 이동합니다. 04.10 23 0
fre novel 9을 또 수정했습니다 몬발켜갤로그로 이동합니다. 02.27 17 0
17 fre html 파일 분할 (장 나누기) 몬발켜갤로그로 이동합니다. 02.21 25 0
16 fre 제미나이 복붙 novel 9을 또 수정했습니다 몬발켜갤로그로 이동합니다. 02.13 40 0
15 fre 제미나이 Flash 2.0을 위한 코드를 수정하였습니다 [4] 몬발켜갤로그로 이동합니다. 02.06 50 0
14 fre 1206, flash 1.5를 위한 코드를 수정했습니다 몬발켜갤로그로 이동합니다. 02.01 23 0
13 fre 누락된 파일명 찾아내기 몬발켜갤로그로 이동합니다. 01.31 12 0
12 fre 순서가 뒤죽박죽인 html 파일 이름 바꾸기 코드 몬발켜갤로그로 이동합니다. 01.31 27 0
11 fre 순서가 뒤죽박죽인 html 파일들 해결하기 몬발켜갤로그로 이동합니다. 01.30 27 0
10 fre 1206, Flash 1.5를 위한 코드를 또 수정했습니다 몬발켜갤로그로 이동합니다. 01.28 24 0
9 fre 1206 복붙 코드를 수정하였습니다 몬발켜갤로그로 이동합니다. 01.17 23 0
8 fre 1206을 위한 복붙 [2] 몬발켜갤로그로 이동합니다. 01.13 81 0
7 일반 이런갤도 있네 프갤러(223.38) 01.10 17 0
6 일반 북스캔 코드에 관한 설명을 추가합니다 몬발켜갤로그로 이동합니다. 01.09 56 0
5 fre 북스캔 book scan 몬발켜갤로그로 이동합니다. 01.07 216 1
4 fre 검색어로 폴더와 그 하위 폴더 안의 파일을 찾아주는 프로그램 몬발켜갤로그로 이동합니다. 24.12.24 127 0
3 fre 검색어로 폴더 안의 파일을 찾아주는 프로그램 [2] 몬발켜갤로그로 이동합니다. 24.12.24 188 0
2 fre 파일명이 (1)로 끝나는 파일만 찾아주는 프로그램 몬발켜갤로그로 이동합니다. 24.12.24 123 1
뉴스 ‘우리는 잉꼬부부가 아닙니다’ 최수종·하희라 자타 공인 대표 잉꼬부부의 파격 변신! 파격 연기 투혼 펼친 ‘수라 부부’! 디시트렌드 07.01
1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2