Fixed the required.txt file. Removed old pyqt5 files and package requirements. Got forward/backward buttons working. Page is now displayed in the gui.
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
|||||||
__pycache__/*
|
__pycache__/*
|
||||||
|
.idea
|
||||||
|
venv/*
|
||||||
|
|||||||
118
main.py
118
main.py
@@ -1,45 +1,109 @@
|
|||||||
from tkinter import *
|
from tkinter import *
|
||||||
from tkinter import filedialog
|
from tkinter import filedialog
|
||||||
from zipfile import ZipFile as zf
|
from zipfile import ZipFile as zf
|
||||||
from PIL import Image
|
from PIL import Image, ImageTk
|
||||||
import time
|
|
||||||
import io
|
import io
|
||||||
|
|
||||||
page = 0
|
class MangaReader:
|
||||||
file = ''
|
def __init__(self, master):
|
||||||
|
self.master = master
|
||||||
|
self.page = 0
|
||||||
|
self.total = 0
|
||||||
|
self.file = 'None'
|
||||||
|
self.img = ''
|
||||||
|
|
||||||
def open_menu():
|
master.title("Manga Reader")
|
||||||
|
|
||||||
|
# tk window size and allow resize
|
||||||
|
master.geometry("700x900")
|
||||||
|
master.resizable(width=True, height=True)
|
||||||
|
|
||||||
|
# Menu Bar
|
||||||
|
self.menu = Menu(master)
|
||||||
|
item = Menu(self.menu)
|
||||||
|
item.add_command(label="Open", command=self.open_menu)
|
||||||
|
item.add_separator()
|
||||||
|
item.add_command(label="Exit", command=master.quit)
|
||||||
|
self.menu.add_cascade(label="File", menu=item)
|
||||||
|
root.config(menu=self.menu)
|
||||||
|
|
||||||
|
self.buttonFrame = Frame(master)
|
||||||
|
|
||||||
|
# forward/back buttons
|
||||||
|
self.nextPg = Button(self.buttonFrame, text='>')
|
||||||
|
self.nextPg.bind('<Button-1>', self.nextPage)
|
||||||
|
self.nextPg.grid(row=0, column=2)
|
||||||
|
self.buttonFrame.pack(side=BOTTOM)
|
||||||
|
self.backPg = Button(self.buttonFrame, text='<')
|
||||||
|
self.backPg.bind('<Button-1>', self.backPage)
|
||||||
|
self.backPg.grid(row=0, column=0)
|
||||||
|
|
||||||
|
# page counter
|
||||||
|
self.pgcount = Label(self.buttonFrame, text= str(self.page) + " of " + str(self.total))
|
||||||
|
self.pgcount.grid(row=1, columns=1, columnspan=2)
|
||||||
|
|
||||||
|
self.mangaTitle = Label(self.buttonFrame, text=self.file)
|
||||||
|
self.mangaTitle.grid(row=0, column=1)
|
||||||
|
|
||||||
|
# display image
|
||||||
|
self.panel = Label(self.master, image=self.img)
|
||||||
|
self.panel.pack()
|
||||||
|
|
||||||
|
def open_menu(self):
|
||||||
|
# file dialog. reset page counts, call display Maanga passing in starting values
|
||||||
mangaFile = filedialog.askopenfilename()
|
mangaFile = filedialog.askopenfilename()
|
||||||
file = mangaFile
|
self.file = mangaFile
|
||||||
displayManga(file,1)
|
self.page = 0
|
||||||
|
self.total = 0
|
||||||
|
self.mangaTitle.configure(text=self.file)
|
||||||
|
self.displayManga(self.file, 0)
|
||||||
|
|
||||||
|
def displayManga(self, file, pg):
|
||||||
|
basewidth = 500
|
||||||
|
|
||||||
def displayManga(file,pg):
|
|
||||||
with zf(file, 'r') as zip:
|
with zf(file, 'r') as zip:
|
||||||
# grab all the manga pages from the cbz file and sort them to put them in the correct order
|
# grab all the manga pages from the cbz file and sort them to put them in the correct order
|
||||||
fl = zip.namelist()
|
fl = zip.namelist()
|
||||||
fl.sort()
|
fl.sort()
|
||||||
data = zip.read(fl[pg-1])
|
self.total = len(fl)-1
|
||||||
|
# grab the current page out of the array. treat it as byte data since it's still zipped.
|
||||||
|
data = zip.read(fl[pg])
|
||||||
im = Image.open(io.BytesIO(data))
|
im = Image.open(io.BytesIO(data))
|
||||||
im.show()
|
|
||||||
page = pg
|
wpercent = (basewidth / float(im.size[0]))
|
||||||
|
hsize = int((float(im.size[1]) * float(wpercent)))
|
||||||
|
|
||||||
|
im = im.resize((basewidth, hsize), Image.ANTIALIAS)
|
||||||
|
#convert to tkImage and update the on screen image.
|
||||||
|
self.img = ImageTk.PhotoImage(im)
|
||||||
|
self.panel.config(image=self.img)
|
||||||
|
#finally update the current page count
|
||||||
|
self.pgcount.configure(text=str(pg+1) + " of " + str(self.total))
|
||||||
|
|
||||||
|
def nextPage(self, event):
|
||||||
|
self.page = self.page + 1
|
||||||
|
if self.page < self.total:
|
||||||
|
self.displayManga(self.file, self.page)
|
||||||
|
else:
|
||||||
|
#reset self.page and doNothing
|
||||||
|
self.page = self.page - 1
|
||||||
|
# self.doNothing()
|
||||||
|
|
||||||
|
def backPage(self, event):
|
||||||
|
self.page = self.page - 1
|
||||||
|
if self.page >= 0:
|
||||||
|
self.displayManga(self.file, self.page)
|
||||||
|
else:
|
||||||
|
#reset self.page and doNothing
|
||||||
|
self.page = self.page + 1
|
||||||
|
# self.doNothing()
|
||||||
|
|
||||||
|
def doNothing(self):
|
||||||
|
print(self.page)
|
||||||
|
print("FUCCK YOU")
|
||||||
|
|
||||||
|
|
||||||
#initalize tk
|
#initalize tk
|
||||||
root=Tk()
|
root=Tk()
|
||||||
root.title("Manga Reader")
|
app = MangaReader(root)
|
||||||
|
|
||||||
#tk window size and allow resize
|
|
||||||
root.geometry("500x300")
|
|
||||||
root.resizable(width=True, height=True)
|
|
||||||
|
|
||||||
#Menu Bar
|
|
||||||
menu = Menu(root)
|
|
||||||
item = Menu(menu)
|
|
||||||
item.add_command(label="Open", command=open_menu)
|
|
||||||
item.add_separator()
|
|
||||||
item.add_command(label="Exit", command=root.quit)
|
|
||||||
menu.add_cascade(label="File", menu=item)
|
|
||||||
root.config(menu=menu)
|
|
||||||
|
|
||||||
|
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
|
|||||||
20
qt/main.py
20
qt/main.py
@@ -1,20 +0,0 @@
|
|||||||
import sys
|
|
||||||
import readergui as rg
|
|
||||||
|
|
||||||
from PyQt5.QtWidgets import QMainWindow, QApplication
|
|
||||||
from PyQt5.QtCore import Qt
|
|
||||||
|
|
||||||
class Window(QMainWindow):
|
|
||||||
def __init__(self):
|
|
||||||
super(Window, self).__init__()
|
|
||||||
self.ui = rg.Ui_MainWindow()
|
|
||||||
self.ui.setupUi(self)
|
|
||||||
self.ui.nextButton.clicked.connect(self.but_test)
|
|
||||||
def but_test(self):
|
|
||||||
print("button clicked")
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
app = QApplication(sys.argv)
|
|
||||||
window = Window()
|
|
||||||
window.show()
|
|
||||||
sys.exit(app.exec())
|
|
||||||
81
qt/reader.ui
81
qt/reader.ui
@@ -1,81 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>480</width>
|
|
||||||
<height>640</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>MainWindow</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="centralwidget">
|
|
||||||
<widget class="QGraphicsView" name="mainImage">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>10</x>
|
|
||||||
<y>10</y>
|
|
||||||
<width>461</width>
|
|
||||||
<height>511</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QDialogButtonBox" name="testBox">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>70</x>
|
|
||||||
<y>140</y>
|
|
||||||
<width>174</width>
|
|
||||||
<height>34</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons">
|
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>10</x>
|
|
||||||
<y>550</y>
|
|
||||||
<width>461</width>
|
|
||||||
<height>36</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="backButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Back</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="nextButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Next</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenuBar" name="menubar">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>480</width>
|
|
||||||
<height>30</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Form implementation generated from reading ui file 'reader.ui'
|
|
||||||
#
|
|
||||||
# Created by: PyQt5 UI code generator 5.15.0
|
|
||||||
#
|
|
||||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
|
||||||
# run again. Do not edit this file unless you know what you are doing.
|
|
||||||
|
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
|
||||||
|
|
||||||
|
|
||||||
class Ui_MainWindow(object):
|
|
||||||
def setupUi(self, MainWindow):
|
|
||||||
MainWindow.setObjectName("MainWindow")
|
|
||||||
MainWindow.resize(480, 640)
|
|
||||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
|
||||||
self.centralwidget.setObjectName("centralwidget")
|
|
||||||
self.mainImage = QtWidgets.QGraphicsView(self.centralwidget)
|
|
||||||
self.mainImage.setGeometry(QtCore.QRect(10, 10, 461, 511))
|
|
||||||
self.mainImage.setObjectName("mainImage")
|
|
||||||
self.testBox = QtWidgets.QDialogButtonBox(self.centralwidget)
|
|
||||||
self.testBox.setGeometry(QtCore.QRect(70, 140, 174, 34))
|
|
||||||
self.testBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
|
|
||||||
self.testBox.setObjectName("testBox")
|
|
||||||
self.widget = QtWidgets.QWidget(self.centralwidget)
|
|
||||||
self.widget.setGeometry(QtCore.QRect(10, 550, 461, 36))
|
|
||||||
self.widget.setObjectName("widget")
|
|
||||||
self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
|
|
||||||
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
|
|
||||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
|
||||||
self.backButton = QtWidgets.QPushButton(self.widget)
|
|
||||||
self.backButton.setObjectName("backButton")
|
|
||||||
self.horizontalLayout.addWidget(self.backButton)
|
|
||||||
self.nextButton = QtWidgets.QPushButton(self.widget)
|
|
||||||
self.nextButton.setObjectName("nextButton")
|
|
||||||
self.horizontalLayout.addWidget(self.nextButton)
|
|
||||||
MainWindow.setCentralWidget(self.centralwidget)
|
|
||||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
|
||||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 480, 30))
|
|
||||||
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.backButton.setText(_translate("MainWindow", "Back"))
|
|
||||||
self.nextButton.setText(_translate("MainWindow", "Next"))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
import sys
|
|
||||||
app = QtWidgets.QApplication(sys.argv)
|
|
||||||
MainWindow = QtWidgets.QMainWindow()
|
|
||||||
ui = Ui_MainWindow()
|
|
||||||
ui.setupUi(MainWindow)
|
|
||||||
MainWindow.show()
|
|
||||||
sys.exit(app.exec_())
|
|
||||||
@@ -1,8 +1 @@
|
|||||||
Package Version
|
Pillow==7.2.0
|
||||||
---------- -------
|
|
||||||
Pillow 7.2.0
|
|
||||||
pip 20.2.2
|
|
||||||
PyQt5 5.15.0
|
|
||||||
PyQt5-sip 12.8.0
|
|
||||||
setuptools 47.1.0
|
|
||||||
tk 0.1.0
|
|
||||||
|
|||||||
Reference in New Issue
Block a user