디시인사이드 갤러리

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

갤러리 본문 영역

[free] 1206, Flash 1.5를 위한 코드를 또 수정했습니다

몬발켜갤로그로 이동합니다. 2025.01.28 15:33:38
조회 23 추천 0 댓글 0

이번에 추가한 기능은 프로그램을 처음 실행할 때 default folder를 먼저 선택하도록 설정한 것입니다. 

그러자면, 프로그램을 종료하기 전에 현재 선택된 폴더를 어딘가에 저장해 두어야 합니다.  

그래서 이 프로그램을 처음 실행하면, 먼저 저장된 파일에서 default folder를 확인하게 됩니다. 


한 가지 더 수정한 것이 있는데요, 

붙여넣기를 한 다음에 1.5초 대기 시간이 있었는데, 이것을 0.5초로 줄였습니다. 

이것도 은근히 마음에 걸려서요... 


import sys
import os
import pyperclip
import ctypes
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
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QShortcut, QSizePolicy

class HtmlViewer(QWidget):
    def __init__(self):
        super().__init__()
       
        self.settings = QSettings("MyCompany", "HtmlViewer")  # 설정 파일 관리를 위한 QSettings 인스턴스 생성
       
        # 윈도우 제목 설정
        self.setWindowTitle('Novel 8')
       
        # 창의 크기를 가로 500, 세로 1080으로 설정
        self.setFixedSize(500, 1080)
       
        # FHD 해상도의 오른쪽에 붙도록 창의 위치를 조정 (x: 1920 - 500 = 1420, y: 0)
        self.move(1420, 0)

        # 전체 레이아웃 설정 (세로 방향)
        self.layout = QVBoxLayout()

        # 상단에 폴더 버튼과 파일 이름을 표시할 레이아웃 (가로 방향)
        self.top_layout = QHBoxLayout()

        # 폴더 버튼 추가
        self.folder_button = QPushButton('폴더 선택', self)
        self.folder_button.setFixedSize(150, 30)  # 가로 150, 세로 30으로 버튼 크기 설정
        self.folder_button.clicked.connect(self.select_folder)
        self.top_layout.addWidget(self.folder_button)

        # 파일 이름을 표시할 QLabel 추가
        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)  # 폴더 버튼과 파일 이름 부분의 전체 높이를 40픽셀로 설정
        self.top_widget.setLayout(self.top_layout)
        self.layout.addWidget(self.top_widget)

        # 웹뷰 추가 (HTML 파일 표시)
        self.browser = QWebEngineView()

        # 웹뷰가 나머지 공간을 모두 차지하도록 설정
        self.browser.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.layout.addWidget(self.browser)
       
        # 파일 목록과 인덱스 변수 초기화
        self.file_list = []
        self.index = 0
       
        # ESC 키에 대한 단축키 설정
        self.shortcut = QShortcut(QKeySequence('Esc'), self)
        self.shortcut.activated.connect(self.next_html)
       
        self.setLayout(self.layout)

        # 프로그램 시작 시 default folder 로드
        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):
        # 폴더에서 HTML 파일 목록 가져오기
        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):
        # 설정에서 저장된 default folder 경로 읽기
        folder_path = self.settings.value("defaultFolder")
        if folder_path:
            self.load_folder(folder_path)

    def load_html(self, file_path):
        # 현재 파일 이름을 라벨에 표시
        self.file_name_label.setText(os.path.basename(file_path))

        # 페이지가 이미 로드된 상태에서 다시 호출되는 것을 방지
        self.browser.page().loadFinished.disconnect()

        # HTML 파일을 웹뷰에 로드
        url = QUrl.fromLocalFile(file_path)
        self.browser.setUrl(url)
       
        # 페이지가 로드되면 전체 선택 및 클립보드 복사 수행
        self.browser.page().loadFinished.connect(self.select_and_copy)
   
    def select_and_copy(self):
        # JavaScript로 웹 페이지의 모든 텍스트를 선택
        select_all_js = """
        document.execCommand('selectAll');
        """
       
        # JavaScript 실행 후 클립보드에 복사
        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):
        # pyperclip을 사용하여 텍스트를 클립보드에 복사
        if text:
            pyperclip.copy(text)
            print("Content copied to clipboard.")
            # 복사 후 크롬에서 붙여넣기 작업 시작
            self.perform_chrome_actions()
        else:
            print("No content selected.")

    def clear_clipboard(self):
        # 윈도우의 클립보드를 비우기 위해 ctypes 사용
        ctypes.windll.user32.OpenClipboard(0)
        ctypes.windll.user32.EmptyClipboard()
        ctypes.windll.user32.CloseClipboard()

    def perform_chrome_actions(self):
        """크롬 브라우저에서 지정된 작업 수행"""
        time.sleep(1)  # 시스템이 준비될 시간을 잠시 대기

        # 작업 1: 크롬 브라우저로 이동 후 좌표에 클릭
        pyautogui.moveTo(317, 992)
        pyautogui.click()
        time.sleep(0.5)
       
        # 작업 2: Ctrl+V로 붙여넣기
        pyautogui.hotkey('ctrl', 'v')
        time.sleep(0.5)

        # 작업 3: 좌표로 이동 후 클릭
        time.sleep(0.5)
        pyautogui.moveTo(1060, 992)
        time.sleep(0.5)
        pyautogui.click()

    def next_html(self):
        # 클립보드를 먼저 지움
        self.clear_clipboard()
       
        # 인덱스를 1 증가시켜 다음 파일 로드
        if self.file_list:
            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()
       
        # 인덱스를 1 감소시켜 이전 파일 로드
        if self.file_list:
            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
18 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
fre 1206, Flash 1.5를 위한 코드를 또 수정했습니다 몬발켜갤로그로 이동합니다. 01.28 23 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