Python Forum
Raw Image Data Viewer using tkinter - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: General (https://python-forum.io/forum-1.html)
+--- Forum: Code sharing (https://python-forum.io/forum-5.html)
+--- Thread: Raw Image Data Viewer using tkinter (/thread-34838.html)



Raw Image Data Viewer using tkinter - menator01 - Sep-06-2021

#! /usr/bin/env python3

from skimage.io import imread
import tkinter as tk
from tkinter import filedialog
from os import sys
import argparse


parser = argparse.ArgumentParser()
parser.add_argument('--minutes', type=int, help='--minutes n to add minutes. Leave blank to stay open.')
args = parser.parse_args()

minutes = None

if args.minutes:
    minutes = args.minutes*60000
else:
    pass

root = tk.Tk()
root.geometry('1020x600+250+250')
root.title('Raw Image Viewer')
root['padx'] = 5
root['pady'] = 5
root['padx'] = 20
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

def get_image():
    file = filedialog.askopenfilename(title='Image File')
    img = tk.PhotoImage(file=file)
    img.back = img

    img_label = tk.Label(emptyframe)
    img_label['image'] = img
    img_label.grid(column=0, row=0, sticky='news')

    col = 0
    row = 0

    imag = imread(file)
    listbox.delete(0, tk.END)

    for data in imag:
        listbox.insert(tk.END, data)


container = tk.Frame(root)
container.grid(column=0, row=0, sticky='news')
container.grid_columnconfigure(0, weight=1)
container.grid_columnconfigure(1, weight=3)
container.grid_rowconfigure(1, weight=3)

border = tk.Frame(container)
border['highlightcolor'] = 'lightgray'
border['highlightbackground'] = 'lightgray'
border['highlightthickness'] = 1
border.grid(column=0, row=0, sticky='news', padx=2, pady=2)

label = tk.Label(border, text='Choose an Image')
label.grid(column=0, row=0, sticky='news')

btnborder = tk.Frame(container)
btnborder['highlightcolor'] = 'lightgray'
btnborder['highlightbackground'] = 'lightgray'
btnborder['highlightthickness'] = 1
btnborder.grid(column=1, row=0, sticky='news', padx=1, pady=2)
btnborder.grid_columnconfigure(0, weight=3)

btn = tk.Button(btnborder, text='Get Image', command=get_image)
btn.grid(column=0, row=0, sticky='n')

emptyframe = tk.Frame(container)
emptyframe['highlightthickness'] = 1
emptyframe['highlightcolor'] = 'lightgray'
emptyframe['highlightbackground'] = 'lightgray'
emptyframe.grid(column=0, row=1, sticky='news', padx=2)
emptyframe.grid_rowconfigure(1, weight=3)
emptyframe.grid_columnconfigure(0, weight=3)


spacer = tk.Frame(container, bg='white', border=1)
spacer['highlightbackground'] = 'lightgray'
spacer['highlightcolor'] = 'lightgray'
spacer['highlightthickness'] = 1
spacer.grid(column=1, row=1, sticky='news')
spacer.grid_rowconfigure(0, weight=3)
spacer.grid_columnconfigure(0, weight=3)

boxframe = tk.Frame(spacer, bg='white', border=2)
boxframe['highlightcolor'] = 'white'
boxframe['highlightbackground'] = 'white'
boxframe['highlightthickness'] = 2
boxframe.grid(column=0, row=0, sticky='news', padx=2, pady=2)
boxframe.grid_rowconfigure(0, weight=3)

horizontalbar = tk.Scrollbar(spacer, orient='horizontal')
horizontalbar.grid(column=0, row=1, sticky='ew')

verticalbar = tk.Scrollbar(spacer, orient='vertical')
verticalbar.grid(column=1, row=0, sticky='ns')

listbox = tk.Listbox(boxframe, relief='flat')
listbox['highlightthickness'] = 0
listbox.pack(expand=True, fill='both')
listbox['xscrollcommand'] = horizontalbar.set
listbox['yscrollcommand'] = verticalbar.set
horizontalbar.configure(command=listbox.xview)
verticalbar.configure(command=listbox.yview)

root.bind('<q>', sys.exit)
root.bind('<Escape>', sys.exit)

if minutes:
    root.after(minutes, sys.exit)


root.mainloop()



RE: Raw Image Data Viewer using tkinter - menator01 - Sep-07-2021

Pyside2 version. Image formats are png, jpg, ico, and bmp. The jpg images seem to take a few sewconds to display. Maybe because the files are large?

#! /usr/bin/env python3

import sys
from skimage.io import imread
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, \
QLabel, QPushButton, QVBoxLayout, QHBoxLayout, QFrame, QFileDialog, \
QListView, QListWidget
from PySide2.QtGui import QCursor, QPixmap
from PySide2.QtCore import Qt

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("Raw Image Viewer")
        self.setFixedWidth(800)

        main_layout = QVBoxLayout()
        title_layout = QHBoxLayout()
        layout2 = QHBoxLayout()
        layout3 = QHBoxLayout()


        main_layout.addLayout(title_layout)
        main_layout.addLayout(layout2)
        main_layout.addLayout(layout3)


        title = QLabel('Raw Image Viewer')
        title.setAlignment(Qt.AlignVCenter | Qt.AlignHCenter)
        title.setFrameStyle(QFrame.StyledPanel)
        title.setStyleSheet('font-weight: bold; font-size: 30pt; padding: 10px; \
        color: rgb(100, 100, 200); background-color: rgb(198, 190, 200);')

        text_col = QLabel('Choose an image')
        text_col.setFrameStyle(QFrame.StyledPanel)
        text_col.setStyleSheet('font-size: 10pt; color: navy; padding: 5px; \
        background-color: rgb(198, 190, 200); text-decoration: underline;')

        btn = QPushButton('Get Image')
        btn.setStyleSheet('font-size: 12pt; padding: 5px; \
        color: steelblue; font-weight: bold;')
        btn.setAutoFillBackground(True)
        btn.setCursor(QCursor(Qt.PointingHandCursor))
        btn.clicked.connect(self.get_file)


        self.img_panel = QLabel()
        self.img_panel.setFrameStyle(QFrame.StyledPanel)

        self.img_panel.setScaledContents(True)
        self.img_panel.setFixedWidth(200)
        self.img_panel.setFixedHeight(200)

        img_data = QLabel()
        img_data.setFrameStyle(QFrame.StyledPanel)

        self.data = QListWidget()



        title_layout.addWidget(title)
        layout2.addWidget(text_col)
        layout2.addWidget(btn)
        layout3.addWidget(self.img_panel)
        layout3.addWidget(img_data)
        layout3.addWidget(self.data)



        widget = QWidget()

        widget.setLayout(main_layout)
        self.setCentralWidget(widget)


    def get_file(self):
        file = QFileDialog.getOpenFileName(self, 'Open File', '.', \
        'Image Files (*.png *.jpg *.bmp *.ico)')
        pixmap = QPixmap(file[0])
        self.img_panel.setPixmap(pixmap)

        self.data.clear()
        for lines in imread(file[0]):
            for line in lines:
                self.data.addItem(f'{line}')


app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()