Python Forum
Raw Image Data Viewer using tkinter
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Raw Image Data Viewer using tkinter
#1
#! /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()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#2
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_()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Tkinter Image buttons menator01 1 2,563 Jan-29-2022, 06:04 PM
Last Post: Yoriz

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020