Python Forum
Displaying output in GUI ( Tkinter) - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: Displaying output in GUI ( Tkinter) (/thread-29979.html)



Displaying output in GUI ( Tkinter) - Zouloutamtam - Sep-28-2020

Hi everyone
I am new to "programing".
I am experiencing some problems to display my output data on Tkinter. i have been reading a lot. but i am not geting there.
I am doing a round robin tournament and it is printed out in Python. (That part is working)
I would it to be printed in Tkinter.
Thanks.


RE: Displaying output in GUI ( Tkinter) - buran - Sep-28-2020

In GUI development you don't print (i.e. to console/or whatever stdout is). You display information using respective widgets


RE: Displaying output in GUI ( Tkinter) - Zouloutamtam - Sep-28-2020

First of all thanks for the quick response.
I did introduce widgets for my outputs. For some reasons, the code does not work.
I can show you the code if you want.


RE: Displaying output in GUI ( Tkinter) - buran - Sep-28-2020

(Sep-28-2020, 10:44 AM)Zouloutamtam Wrote: For some reasons, the code does not work.
I can show you the code if you want.
that would be a good start. Post your code in python tags, full traceback if you get any - in error tags.
See BBcode help for more info.


RE: Displaying output in GUI ( Tkinter) - Zouloutamtam - Sep-28-2020

I did use the print when I was in Python.
Do i need to replace the word "print"
I am very very new.

rom tkinter import *

window = Tk()
window.title("Welcome to Dr.G app")
window.geometry('700x500')
window.configure(background = "#49a")
my_entries = []
def create_balanced_round_robin(players):
    """ Create a schedule for the players in the list and return it"""
    s = []
    if len(players) % 2 == 1: players = players + ["BYE"]
    # manipulate map (array of indexes for list) instead of list itself
    n = len(players)
    print(n)
    map = list(range(n))
    mid = n // 2
    for i in range(n-1):
        l1 = map[:mid]
        l2 = map[mid:]
        l2.reverse()
        round = []
        for j in range(mid):
            t1 = players[l1[j]]
            t2 = players[l2[j]]
            if j == 0 and i % 2 == 1:
                # flip the first match only, every other round
                # (this is because the first match always involves the last player in the list)
                round.append((t2, t1))
            else:
                round.append((t1, t2))

        s.append(round)
        # rotate list by n/2, leaving last element at the end
        map = map[mid:-1] + map[:mid] + map[-1:]
    return s

def something():
    player_list = []
    entry_list = ""
    for entries in my_entries:
        if str(entries.get()) != "":
             player_list.append(str(entries.get()))
             entry_list = entry_list + str(entries.get()) + "\n"

    #The var entryvar contains the text widget content
    entryvar = player_list
    player_list.delete(1.0,tk.END)
    player_list.insert(tk.END)
    my_label.config(text=entryvar)
    my_label.pack

    schedule = create_balanced_round_robin(player_list)
    print("\n".join(['{} vs. {}'.format(m[0], m[1]) for round in schedule for m in round]))

#row loop
for y in range(5):
     #column loop
     for x in range(5):
        my_entry = Entry(window)
        my_entry.grid(row=y, column=x, pady=20, padx=5)
        my_entries.append(my_entry)
my_button = Button(window, text="Click Me", command=something)
my_button.grid(row=6, column=0, pady=20)
my_label = Label(window,
                 text=" ",
                 font=("Arial Bold", 15))
my_label.grid(row=7, column=0, pady=20)
window.mainloop()

The va entry var....my label pack was added for the GUI.


RE: Displaying output in GUI ( Tkinter) - buran - Sep-28-2020

it's not about replacing print. You must use widgets, for exaple Label, to display information. There are other widgets, that may be more suitable, depending on what king of information you want to display

and by the way, you are still in python :-)


RE: Displaying output in GUI ( Tkinter) - Zouloutamtam - Sep-28-2020

If line 45 - 50 are removed. you should get a scheduled tournament after putting some names. A vs B, F vs C...
I would like to get this output in Tkinker. There comes lines 45 -50. In my layman mind i get what i am trying to do. Buyt i am using the wrong code. I need to use widget and label.

Can you please tell me hoe you get the numbers primted on the side. I have been trying. i am not getting it.


RE: Displaying output in GUI ( Tkinter) - Zouloutamtam - Sep-29-2020

All sorted. I have put the outputs to labels.
from tkinter import *

window = Tk()
window.title("Welcome to Dr.G app")
window.geometry('700x500')
window.configure(background = "#49a")
my_entries = []
def create_balanced_round_robin(players):
    """ Create a schedule for the players in the list and return it"""
    s = []
    if len(players) % 2 == 1: players = players + ["BYE"]
    # manipulate map (array of indexes for list) instead of list itself
    n = len(players)
    print(n)
    map = list(range(n))
    mid = n // 2
    for i in range(n-1):
        l1 = map[:mid]
        l2 = map[mid:]
        l2.reverse()
        round = []
        for j in range(mid):
            t1 = players[l1[j]]
            t2 = players[l2[j]]
            if j == 0 and i % 2 == 1:
                # flip the first match only, every other round
                # (this is because the first match always involves the last player in the list)
                round.append((t2, t1))
            else:
                round.append((t1, t2))

        s.append(round)
        # rotate list by n/2, leaving last element at the end
        map = map[mid:-1] + map[:mid] + map[-1:]
    return s

def something():
    player_list = []
    entry_list = ""
    for entries in my_entries:
        if str(entries.get()) != "":
             player_list.append(str(entries.get()))
             entry_list = entry_list + str(entries.get()) + "\n"
#output
    entryvar = player_list
    #player_list.delete(1.0,tk.END)
   #player_list.insert(tk.END)
    my_label.config(text=entryvar)
    my_label.pack

    schedule = create_balanced_round_robin(player_list)
    my_label.config(text="\n".join(['{} vs. {}'.format(m[0], m[1]) for round in schedule for m in round]))

#Input
#row loop
for y in range(5):
     #column loopetes
     for x in range(5):
        my_entry = Entry(window)
        my_entry.grid(row=y, column=x, pady=20, padx=5)
        my_entries.append(my_entry)
my_button = Button(window, text="Click Me", command=something)
my_button.grid(row=6, column=0, pady=20)
my_label = Label(window,
                 text=" ",
                 font=("Arial Bold", 15))
my_label.grid(row=7, column=0, pady=20)
window.mainloop()