Untitled

mail@pastecode.io avatar
unknown
plain_text
10 months ago
12 kB
19
No Index
Never
import os
import tkinter as tk
from tkinter import filedialog
import zipfile
import xml.etree.ElementTree as ET

#nepotřebný objekt, do kterého jsem chtěl lepit výsledky
class FireSResult:
    def __init__(self, overall, graphics, gt1p, gt2p):
        self.overall = overall
        self.graphics = graphics
        self.gt1p = gt1p
        self.gt2p = gt2p

#zavírá program po zavření okna
def on_destroy(event):
    quit()

#procedura na nalistování složky a vložení její cesty od infoboxu
def open_folder():
    root = tk.Tk()
    root.withdraw()
    folder = filedialog.askdirectory()
    path_box.delete("1.0", tk.END)
    path_box.insert(tk.END, f'{folder}')
#    for filename in os.listdir(folder):
#        if filename.startswith('firestrike') and filename.endswith('loop1.3dmark-result'):
#            with open(os.path.join(folder, filename), 'r') as file:
#                data = file.read()
#                print(data)
#            break

#kopíruje obsah text editu do schránky
def copy_text():
    text = text_box.get("1.0", tk.END)
    root.clipboard_clear()
    root.clipboard_append(text)

#prochází pakovaný soubor s výsledky ze 3Dmarku
def process_3dm(Selfolder, filename_start, filename_end, keyvalue1, keyvalue2=None, keyvalue3=None, keyvalue4=None, keyvalue5=None):
    file_found = 'not found'
    value1_text = 'N/A'
    value2_text = 'N/A'
    value3_text = 'N/A'
    value4_text = 'N/A'
    value5_text = 'N/A'
    for filename in os.listdir(Selfolder):
        if filename.startswith(filename_start) and filename.endswith(filename_end):
            file_path = os.path.join(Selfolder, filename)
            file_found = file_path
            with zipfile.ZipFile(file_path, 'r') as myzip:
                with myzip.open('Result.xml') as myfile:
                    tree = ET.parse(myfile)
                    root = tree.getroot()

                    value1_text = 'N/A'
                    value2_text = 'N/A'
                    value3_text = 'N/A'
                    value4_text = 'N/A'
                    value5_text = 'N/A'
                    
                    for result in root.findall('./results/result'):
                        if keyvalue1 is not None:
                            value1 = result.find(keyvalue1)
                            if value1 is not None:
                                value1_text = value1.text
                        if keyvalue2 is not None:    
                            value2 = result.find(keyvalue2)
                            if value2 is not None:
                                value2_text = value2.text
                        if keyvalue3 is not None:    
                            value3 = result.find(keyvalue3)
                            if value3 is not None:
                                value3_text = value3.text
                        if keyvalue4 is not None:    
                            value4 = result.find(keyvalue4)
                            if value4 is not None:
                                value4_text = value4.text
                        if keyvalue5 is not None:    
                            value5 = result.find(keyvalue5)
                            if value5 is not None:
                                value5_text = value5.text
                            
    result = [file_found]
    if keyvalue1 is not None:
        result.append(value1_text)
    if keyvalue2 is not None:
        result.append(value2_text)
    if keyvalue3 is not None:
        result.append(value3_text)
    if keyvalue4 is not None:
        result.append(value4_text)
    if keyvalue5 is not None:
        result.append(value5_text)
    
    return tuple(result)
                           
#hlavní procedura, prochází jednotlivé výsledky voláním funkce
def open_file():
    text_box.delete("1.0", tk.END)
    Selfolder = path_box.get("1.0", "end-1c").strip()
#    print(f"Selected folder: {Selfolder}")
#    for filename in os.listdir(Selfolder):
#        print(f"Found file: {filename}")
#        print(f"Processing file: {filename}")
#        file_path = os.path.join(Selfolder, filename)

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'firestrike- ', '-loop-1.3dmark-result', 'firestrikeoverallscorep', 'firestrikegraphicsscorep', 'firestrikegt1p', 'firestrikegt2p')
    text_box.insert(tk.END, f"{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'firestrike- ', '-loop-2.3dmark-result', 'firestrikeoverallscorep', 'firestrikegraphicsscorep', 'firestrikegt1p', 'firestrikegt2p')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'firestrike-extreme- ', '-loop-1.3dmark-result', 'FireStrikeExtreme3DMarkScore', 'FireStrikeExtremeGraphicsScore', 'FireStrikeExtremeGraphicsTest1', 'FireStrikeExtremeGraphicsTest2')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'firestrike-extreme- ', '-loop-2.3dmark-result', 'FireStrikeExtreme3DMarkScore', 'FireStrikeExtremeGraphicsScore', 'FireStrikeExtremeGraphicsTest1', 'FireStrikeExtremeGraphicsTest2')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'timespy- ', '-loop-1.3dmark-result', 'TimeSpyPerformance3DMarkScore', 'TimeSpyPerformanceGraphicsScore', 'TimeSpyPerformanceGraphicsTest1', 'TimeSpyPerformanceGraphicsTest2')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'timespy- ', '-loop-2.3dmark-result', 'TimeSpyPerformance3DMarkScore', 'TimeSpyPerformanceGraphicsScore', 'TimeSpyPerformanceGraphicsTest1', 'TimeSpyPerformanceGraphicsTest2')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'timespy-extreme- ', '-loop-1.3dmark-result', 'TimeSpyExtreme3DMarkScore', 'TimeSpyExtremeGraphicsScore', 'TimeSpyExtremeGraphicsTest1', 'TimeSpyExtremeGraphicsTest2')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text, value4_text = process_3dm(Selfolder, 'timespy-extreme- ', '-loop-2.3dmark-result', 'TimeSpyExtreme3DMarkScore', 'TimeSpyExtremeGraphicsScore', 'TimeSpyExtremeGraphicsTest1', 'TimeSpyExtremeGraphicsTest2')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}\n{value4_text}")

    file_found, value1_text, value2_text, value3_text = process_3dm(Selfolder, 'speedway- ', '-loop-1.3dmark-result', 'SpeedWayPerformance3DMarkScore', 'SpeedWayPerformanceGraphicsScore', 'SpeedWayPerformanceGraphicsTest')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}")

    file_found, value1_text, value2_text, value3_text = process_3dm(Selfolder, 'speedway- ', '-loop-2.3dmark-result', 'SpeedWayPerformance3DMarkScore', 'SpeedWayPerformanceGraphicsScore', 'SpeedWayPerformanceGraphicsTest')
    text_box.insert(tk.END, f"\n{file_found}\n{value1_text}\n{value2_text}\n{value3_text}")





    text = text_box.get("1.0", "end-1c")
    text = text.replace('.', ',')
    text_box.delete("1.0", "end")
    text_box.insert("end", text)

root = tk.Tk()
root.bind("<Destroy>", on_destroy)
root.title("3DMark extraktátor")

# Set window size
window_width = 300
window_height = 300
root.geometry(f"{window_width}x{window_height}")

# Set the minimum window size
root.minsize(width=350, height=250)

# Set text box size and position
# path_box = tk.Text(root, height=2)
# path_box.pack(fill=tk.X, padx=5, pady=5)

# Create a frame to contain the text box and scrollbar
text_frame = tk.Frame(root)
text_frame.pack(side=tk.TOP, expand=True, fill=tk.BOTH, padx=5, pady=5)

# Set text box size and position
text_box = tk.Text(text_frame, height=10)
text_box.grid(row=0, column=0, sticky="nsew")
text_box.configure(takefocus=False)

# Create a scrollbar
scrollbar = tk.Scrollbar(text_frame)

# Pack the scrollbar to the right side of the frame
scrollbar.grid(row=0, column=1, sticky="ns")

# Set the text box to use the scrollbar
text_box.config(yscrollcommand=scrollbar.set)

# Set the scrollbar to use the text box
scrollbar.config(command=text_box.yview)

# Configure the grid to resize properly
text_frame.columnconfigure(0, weight=1)
text_frame.rowconfigure(0, weight=1)

# Define placeholder functions for handling the <Tab> and <Shift-Tab> events
def on_tab(event):
    pass

def on_shift_tab(event):
    pass

# Create a frame to contain the buttons
button_frame = tk.Frame(root)
button_frame.pack(side=tk.BOTTOM, fill=tk.X)

# Set button sizes and positions
button_width = 10
button_height = 1

# Create the copy button and pack it inside the button frame
copy_button = tk.Button(button_frame, text="Copy", command=copy_text, width=button_width, height=button_height)
copy_button.pack(side=tk.RIGHT, padx=(2, 5), pady=5)
copy_button.bind("<Tab>", on_tab)
copy_button.bind("<Shift-Tab>", on_shift_tab)

# Create the open file button and pack it inside the button frame
open_file_button = tk.Button(button_frame, text="Open File", command=open_file, width=button_width, height=button_height)
open_file_button.pack(side=tk.RIGHT, padx=2, pady=5)
open_file_button.bind("<Tab>", on_tab)
open_file_button.bind("<Shift-Tab>", on_shift_tab)

# Create the open folder button and pack it inside the button frame
open_folder_button = tk.Button(button_frame, text="Open Folder", command=open_folder, width=button_width, height=button_height)
open_folder_button.pack(side=tk.RIGHT, padx=2, pady=5)
open_folder_button.bind("<Tab>", on_tab)
open_folder_button.bind("<Shift-Tab>", on_shift_tab)
open_folder_button.focus()

# Create a function to handle the <Tab> event for each button
def on_tab(event):
    if event.widget == copy_button:
        open_folder_button.focus()
    elif event.widget == open_file_button:
        copy_button.focus()
    elif event.widget == open_folder_button:
        open_file_button.focus()
    return "break"


# Create a function to handle the <Shift-Tab> event for each button
def on_shift_tab(event):
    if event.widget == copy_button:
        open_file_button.focus()
    elif event.widget == open_file_button:
        open_folder_button.focus()
    elif event.widget == open_folder_button:
        copy_button.focus()
    return "break"

# Update the function bindings for each button
copy_button.bind("<Tab>", on_tab)
copy_button.bind("<Shift-Tab>", on_shift_tab)

open_file_button.bind("<Tab>", on_tab)
open_file_button.bind("<Shift-Tab>", on_shift_tab)

open_folder_button.bind("<Tab>", on_tab)
open_folder_button.bind("<Shift-Tab>", on_shift_tab)

# Create a frame to contain the path box
path_frame = tk.Frame(root)
path_frame.pack(side=tk.BOTTOM, fill=tk.X)

# Set text box size and position
path_box = tk.Text(path_frame, height=2)
path_box.pack(fill=tk.X, padx=5, pady=(0, 0))
path_box.configure(takefocus=False)

root.mainloop()