Python Forum
Second frame (listbox) in GUI
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Second frame (listbox) in GUI
#1
I have a gui created with tkinter. I want to appear a second window/frame when a button is pressed, but my code instead of appearing a new window (except of the title that appears correctly to a new tk) places the listbox output (which is related to the window/frame) below the last row of the "master" gui, i.e. row=30. The code that creates the listbox/new_frame starts from row 415 and ends in row 486. I think the problem has to do with the container's grid that although is related to ttk1 (=w2), it appears to w1 (= master gui)

import cx_Oracle
from tkinter import*
from tkinter import messagebox
import time
from datetime import datetime
from tkinter import ttk
import tkinter.messagebox as box
import tkinter as tk
import tkinter.font as tkFont
import tkinter.ttk as ttk1
import tkinter as tk2


def search():
 try:
#=============DB Connect======================#                
        connstr='SOLVATIO/SOLVATIO@localhost'
        conn = cx_Oracle.connect(connstr)
        curs = conn.cursor()
        curs1= conn.cursor()
#=============first_query======================#   
        curs.execute("select * from customers where afm='%s'"%afm.get())      
        result=curs.fetchone()
        company_name.set(result[1])
        siebel_customer_code.set(result[3])
       
#=============2nd_query======================#
        curs1.execute("select name_project,description, sb_masterlist, count(*) "
                      + "from customer_desc where company_name_d='%s' group by name_project, description, sb_masterlist"%e2.get())
        results=curs1.fetchall()
        i=curs1.rowcount
        rr=len(results)
        ##print(len(results))
    
        for i in range(0,rr):
         #rr+=1
                #if
        #if i==0:
         #print("no rows")
        #else:
         if i in range (0, 1):
           name_project=(results[0][0])
           description=(results[0][1])
           sb_masterlist=(results[0][2])
           fname_project1.set(name_project)
           fdescription1.set(description)
           fsb_masterlist1.set(sb_masterlist)
         if i in range (1, 2):
           name_project=(results[0][0])
           description=(results[0][1])
           sb_masterlist=(results[0][2])
           fname_project1.set(name_project)
           fdescription1.set(description)
           fsb_masterlist1.set(sb_masterlist)
           name_project=(results[1][0])
           description=(results[1][1])
           sb_masterlist=(results[1][2])
           fname_project2.set(name_project)
           fdescription2.set(description)
           fsb_masterlist2.set(sb_masterlist)
         if i in range (2, 3):
           name_project=(results[0][0])
           description=(results[0][1])
           sb_masterlist=(results[0][2])
           fname_project1.set(name_project)
           fdescription1.set(description)
           fsb_masterlist1.set(sb_masterlist)
           name_project=(results[1][0])
           description=(results[1][1])
           sb_masterlist=(results[1][2])
           fname_project2.set(name_project)
           fdescription2.set(description)
           fsb_masterlist2.set(sb_masterlist)             
           name_project=(results[2][0])
           description=(results[2][1])
           sb_masterlist=(results[2][2])
           fname_project3.set(name_project)
           fdescription3.set(description)
           fsb_masterlist3.set(sb_masterlist)           
         if i in range (3, 4):
           name_project=(results[0][0])
           description=(results[0][1])
           sb_masterlist=(results[0][2])
           fname_project1.set(name_project)
           fdescription1.set(description)
           fsb_masterlist1.set(sb_masterlist)
           name_project=(results[1][0])
           description=(results[1][1])
           sb_masterlist=(results[1][2])
           fname_project2.set(name_project)
           fdescription2.set(description)
           fsb_masterlist2.set(sb_masterlist)             
           name_project=(results[2][0])
           description=(results[2][1])
           sb_masterlist=(results[2][2])
           fname_project3.set(name_project)
           fdescription3.set(description)
           fsb_masterlist3.set(sb_masterlist)
           name_project=(results[3][0])
           description=(results[3][1])
           sb_masterlist=(results[3][2])           
           fname_project4.set(name_project)
           fdescription4.set(description)
           fsb_masterlist4.set(sb_masterlist)
         if i in range (4, 5):
           name_project=(results[0][0])
           description=(results[0][1])
           sb_masterlist=(results[0][2])
           fname_project1.set(name_project)
           fdescription1.set(description)
           fsb_masterlist1.set(sb_masterlist)
           name_project=(results[1][0])
           description=(results[1][1])
           sb_masterlist=(results[1][2])
           fname_project2.set(name_project)
           fdescription2.set(description)
           fsb_masterlist2.set(sb_masterlist)             
           name_project=(results[2][0])
           description=(results[2][1])
           sb_masterlist=(results[2][2])
           fname_project3.set(name_project)
           fdescription3.set(description)
           fsb_masterlist3.set(sb_masterlist)
           name_project=(results[3][0])
           description=(results[3][1])
           sb_masterlist=(results[3][2])           
           fname_project4.set(name_project)
           fdescription4.set(description)
           fsb_masterlist4.set(sb_masterlist)              
           name_project=(results[4][0])
           description=(results[4][1])
           sb_masterlist=(results[4][2])           
           fname_project5.set(name_project)
           fdescription5.set(description)
           fsb_masterlist5.set(sb_masterlist)
           
        #e1.configure(state='disabled')
        #f1.configure(state='disabled')
            
        conn.close()
 except:
    messagebox.showinfo('Μύνημα', 'No such data')

#=============3rd_query======================#
    
def Search1():
 try:
        connstr='SOLVATIO/SOLVATIO@localhost'
        conn = cx_Oracle.connect(connstr)
        curs2=conn.cursor()
        curs2.execute("select company_name_m, searchcode, hostname, name_project_m, access_type, ivr_division, subarea, new_name_full,"
                      +"subcontractor, masterlist_type from customer_data where primary_identifier='%s'"%primary_identifier.get())  
        results2=curs2.fetchone()
        company_name_m.set(results2[0])
        searchcode.set(results2[1])
        hostname.set(results2[2])
        name_project_m.set(results2[3])
        access_type.set(results2[4])
        ivr_division.set(results2[5])
        subarea.set(results2[6])
        new_name_full.set(results2[7])
        subcontractor.set(results2[8])
        masterlist_type.set(results2[9])
        
        conn.close()

 except:
    messagebox.showinfo('Μύνημα', 'No such data')

#=============4th_query======================#
    
def Search2():
 try:
        connstr='SOLVATIO/SOLVATIO@localhost'
        conn = cx_Oracle.connect(connstr)
        curs3=conn.cursor()
        curs5=conn.cursor()
        curs7=conn.cursor()
        curs3.execute("select  NAME_PROJECT_MCM,MODEL_E,CONTRACT_NUMBER,SUPPORT_LEVEL,SEARCHCODE_MCM,VENDOR_SUPPORT,"
                      +"to_char(customer_support_end_date, 'dd/mm/yyyy'),SUPPLY_TYPE,NEW_NAME_FULL_MCM, AFM_MCM, company_name_mcm from customer_mcm where SERIAL_NUMBER='%s'"%SERIAL_NUMBER.get())  
        results3=curs3.fetchone()
        NAME_PROJECT_MCM.set(results3[0])
        MODEL_E.set(results3[1])
        CONTRACT_NUMBER.set(results3[2])
        SUPPORT_LEVEL.set(results3[3])
        SEARCHCODE_MCM.set(results3[4])
        fSEARCHCODE_MCM=(results3[4])
        VENDOR_SUPPORT.set(results3[5])
        CUSTOMER_SUPPORT_END_DATE.set(results3[6])
        SUPPLY_TYPE.set(results3[7])
        NEW_NAME_FULL_MCM.set(results3[8])
        AFM_MCM.set(results3[9])
        company_name_mcm.set(results3[10])

        curs5.execute("select description from customer_desc where name_project ='%s' and company_name_d='%s'"%(pm2.get(),pm12.get()))
        results5=curs5.fetchone()
        project_mcm_desc.set(results5[0])

       
        conn.close()

 except:
   messagebox.showinfo('Μύνημα', 'No such data')



   
#==================clear button========================================#        
def clear():
    afm.set('')
    company_name.set('')
    siebel_customer_code.set('')
    fdescription1.set('')
    fdescription2.set('')
    fdescription3.set('')
    fdescription4.set('')
    fdescription5.set('')
    fname_project1.set('')
    fname_project2.set('')
    fname_project3.set('')
    fname_project4.set('')
    fname_project5.set('')
    fsb_masterlist1.set('')
    fsb_masterlist2.set('')
    fsb_masterlist3.set('')
    fsb_masterlist4.set('')
    fsb_masterlist5.set('')
    #e1.configure(state='normal')
    #f1.configure(state='normal')

def clear1():
    primary_identifier.set('')
    company_name_m.set('')
    searchcode.set('')
    hostname.set('')
    name_project_m.set('')
    access_type.set('')
    ivr_division.set('')
    subarea.set('')
    new_name_full.set('')
    subcontractor.set('')
    masterlist_type.set('')
    
    #p1.configure(state='normal')


def clear2():
   SERIAL_NUMBER.set('')
   NAME_PROJECT_MCM.set('')
   MODEL_E.set('')
   CONTRACT_NUMBER.set('')
   SUPPORT_LEVEL.set('')
   SEARCHCODE_MCM.set('')
   VENDOR_SUPPORT.set('')
   CUSTOMER_SUPPORT_END_DATE.set('')
   SUPPLY_TYPE.set('')
   NEW_NAME_FULL_MCM.set('')
   AFM_MCM.set('')
   project_mcm_desc.set('')
   company_name_mcm.set('')
    
    #p1.configure(state='normal')

#==========================GUI===========================================#
w1=Tk()
w1.title('GUI Special Solutions')
w1.geometry('1500x800+0+0')


# Defines and places the notebook widget
nb = ttk.Notebook(w1)
nb.grid(row=1, column=0,columnspan=100, rowspan=99,sticky='NESW')

# Adds tab 1 of the notebook
page1 = ttk.Frame(nb)
nb.add(page1, text='Home')

# Adds tab 2 of the notebook
page2 = ttk.Frame(nb)
nb.add(page2, text='Search', state='disabled')

# Adds tab 3 of the notebook
page3 = ttk.Frame(nb)
nb.add(page3, text='Info', state='disabled')

if __name__ == '__main__':

    widget = tk.Label(page1, compound='top')
    widget.lenna_image_png = tk.PhotoImage(file=r"C:\Users\dvordonis\Desktop\python\image.png")
    widget['image'] = widget.lenna_image_png
    widget.grid(row=0, column=0,sticky=E)

    widget = tk.Label(page2, compound='top')
    widget.lenna_image_png = tk.PhotoImage(file=r"C:\Users\dvordonis\Desktop\python\image.png")
    widget['image'] = widget.lenna_image_png
    widget.grid(row=0, column=0,sticky=E)

ptitle=Label(page2, font=('arial',18,'bold'),text='''Search Asset''')
ptitle.grid(row=0, column=2, columnspan=2,sticky='NESW')

title1=Label (page1, font=('arial',14,'bold'),text='''Εύρεση''')
title1.grid(row=1, column=1, sticky=W)
title2=Label (page1, font=('arial',14,'bold'),text='''Στοιχείων SLA''')
title2.grid(row=1, column=2, sticky=W)
title3=Label (page1, font=('arial',14,'bold'),text='''Ειδικών Έργων & Συμβολαίων Υποστήριξης Εταιρικών Πελατών                                                                        ''')
title3.grid(row=1, column=3, sticky=W)

title4=Label (page3, font=('arial',12,'bold'),text='''Σύντομη Περιγραφή:''')
title4.grid(row=1, column=0, sticky=W)
title5=Label (page3, font=('arial',10),text='''Σε βάση Oracle έχει δημιουργηθεί instance με δεδομένα από Masterlists Ειδικών Έργων  Μεγάλων Πελατών και Εξοπλισμού Συμβολαίων Τεχνικής Υποστήριξης.

Σε γραφικό interface (GUI) που έχει υλοποιηθεί σε python, εισάγεται από το χρήστη:

  • το ΑΦΜ του πελάτη και επιστρέφεται λίστα ειδικών έργων με σύντομη περιγραφή τους.
  • το ΦΑΧ του κυκλώματος και επιστρέφονται πληροφορίες masterlist όπως Ονομασία/Δνση Σημείου, Siebel list of values (LOVs), Sub Contractor κ.λπ.
  • το Serial Number εξοπλισμού και επιστρέφονται πληροφορίες έργου τεχνικής υποστήριξης όπως επίπεδο υποστήριξης, κατάσταση Συμβολαίου κ.λπ.
''',justify = LEFT, height = 9, wraplength = 1200)
title5.grid(row=2, column=0, sticky=E)


def clock():

    pdatetime=Label(page2, font=('arial',11,'bold'),text=time.strftime('%d/%m/%Y %H:%M:%S'), fg='blue')
    pdatetime.grid(row=0, column=7, sticky=E)
    pdatetime=Label(page1, font=('arial',11,'bold'),text=time.strftime('%d/%m/%Y %H:%M:%S'), fg='blue')
    pdatetime.grid(row=0, column=5, sticky=W) 
    page2.after(1000, clock) # run itself again after 1000 ms

    
# run first time
clock()


def dialog1():
    username=entry1.get()
    password = entry2.get()
    if (username == 'admin' and  password == 'sla123'):
        box.showinfo('Μύνημα','Correct Login')
        nb.tab(page2, state='normal')
        nb.tab(page3, state='normal')
        nb.tab(page1, state='disabled')
    else:
        box.showinfo('info','Invalid Login')
        entry1.delete(0,END)
        entry2.delete(0,END)

Label1 = Label(page1,text = 'Username:')
Label1.grid(row=2, column=1,sticky=E)
entry1 = Entry(page1,bd =4)
entry1.grid(row=2, column=2,sticky=E)
Label2 = Label(page1,text = 'Password:')
Label2.grid(row=3, column=1,sticky=E)
entry2 = Entry(page1, bd=4, show='*')
entry2.grid(row=3, column=2,sticky=E)

btn = Button(page1, text = 'Login',command = dialog1)
btn.grid(row=4, column=1,sticky=E)
#w1.bind('<Return>',dialog1)

def dialog2():

    if btn2:
        nb.tab(page1, state='normal')
        nb.tab(page2, state='disabled')
        nb.tab(page3, state='disabled')
        entry1.delete(0,END)
        entry2.delete(0,END)
        SERIAL_NUMBER.set('')
        NAME_PROJECT_MCM.set('')
        MODEL_E.set('')
        CONTRACT_NUMBER.set('')
        SUPPORT_LEVEL.set('')
        SEARCHCODE_MCM.set('')
        VENDOR_SUPPORT.set('')
        CUSTOMER_SUPPORT_END_DATE.set('')
        SUPPLY_TYPE.set('')
        NEW_NAME_FULL_MCM.set('')
        AFM_MCM.set('')
        project_mcm_desc.set('')
        company_name_mcm.set('')
        primary_identifier.set('')
        company_name_m.set('')
        searchcode.set('')
        hostname.set('')
        name_project_m.set('')
        access_type.set('')
        ivr_division.set('')
        subarea.set('')
        new_name_full.set('')
        subcontractor.set('')
        masterlist_type.set('')
        afm.set('')
        company_name.set('')
        siebel_customer_code.set('')
        fdescription1.set('')
        fdescription2.set('')
        fdescription3.set('')
        fdescription4.set('')
        fdescription5.set('')
        fname_project1.set('')
        fname_project2.set('')
        fname_project3.set('')
        fname_project4.set('')
        fname_project5.set('')
        fsb_masterlist1.set('')
        fsb_masterlist2.set('')
        fsb_masterlist3.set('')
        fsb_masterlist4.set('')
        fsb_masterlist5.set('')
        ttk1.destroy()
        
btn2 = Button(page2, text = 'Logout',command = dialog2)
btn2.grid(row=26, column=5,sticky=W)

#=============================Table_Widget============================#
def info11():

 if btnw1:
      #import table3_grid

  class MultiColumnListbox(tk2.Tk):

    def __init__(self):
        self.tree = None
        self._setup_widgets()
        self._build_tree()

    def _setup_widgets(self):
        s = """sort
        """
        msg = ttk1.Label(w2,wraplength="4i", justify="left", anchor="n",
            padding=(10, 2, 10, 6), text=s)
        msg.grid(sticky='nsew')
        container = ttk1.Frame()
        container.grid(sticky='nsew')
        # create a treeview with dual scrollbars
        self.tree = ttk1.Treeview(columns=car_header, show="headings")
        vsb = ttk1.Scrollbar(orient="vertical",
            command=self.tree.yview)
        hsb = ttk1.Scrollbar(orient="horizontal",
            command=self.tree.xview)
        self.tree.configure(yscrollcommand=vsb.set,
            xscrollcommand=hsb.set)
        self.tree.grid(column=0, row=0, sticky='nsew', in_=container)
        vsb.grid(column=1, row=0, sticky='ns', in_=container)
        hsb.grid(column=0, row=1, sticky='ew', in_=container)
        container.grid_columnconfigure(0, weight=1)
        container.grid_rowconfigure(0, weight=1)

    def _build_tree(self):
        for col in car_header:
            self.tree.heading(col, text=col.title(),
                command=lambda c=col: sortby(self.tree, c, 0))
            # adjust the column's width to the header string
            self.tree.column(col,
                width=tkFont.Font().measure(col.title()))

        for item in car_list:
            self.tree.insert('', 'end', values=item)

  def sortby(tree, col, descending):
     """sort tree contents when a column header is clicked on"""
    # grab values to sort
     data = [(tree.set(child, col), child) \
        for child in tree.get_children('')]
     data.sort(reverse=descending)
     for ix, item in enumerate(data):
        tree.move(item[1], '', ix)
    # switch the heading so it will sort in the opposite direction
     tree.heading(col, command=lambda col=col: sortby(tree, col, \
        int(not descending)))

  connstr='SOLVATIO/SOLVATIO@localhost'
  conn = cx_Oracle.connect(connstr)
  cursw = conn.cursor()
  cursw.execute("select NAME_PROJECT_MCM, MODEL_E, CONTRACT_NUMBER , SERIAL_NUMBER,company_name_mcm, searchcode_mcm  from customer_mcm where searchcode_mcm='Frap08'")      
  car_list=list(cursw.fetchall())

  car_header = ['NAME_PROJECT_MCM', 'MODEL_E', 'CONTRACT_NUMBER' , 'SERIAL_NUMBER','company_name_mcm', 'searchcode_mcm']

  w2=tk2.Tk()
  w2.title("Multicolumn Treeview/Listbox")
  listbox = MultiColumnListbox()
  w2.mainloop()
btnw1 = Button(page2, text = 'info',command = info11)
btnw1.grid(row=28, column=1,sticky=E)
    

#=======================set variables=====================================#
afm=StringVar()
company_name=StringVar()
siebel_customer_code=StringVar()
name_project=StringVar()
fdescription1=StringVar()
fdescription2=StringVar()
fdescription3=StringVar()
fdescription4=StringVar()
fdescription5=StringVar()
fname_project1=StringVar()
fname_project2=StringVar()
fname_project3=StringVar()
fname_project4=StringVar()
fname_project5=StringVar()
fsb_masterlist1=StringVar()
fsb_masterlist2=StringVar()
fsb_masterlist3=StringVar()
fsb_masterlist4=StringVar()
fsb_masterlist5=StringVar()
primary_identifier=StringVar()
company_name_m=StringVar()
searchcode=StringVar()
hostname=StringVar()
name_project_m=StringVar()
access_type=StringVar()
ivr_division=StringVar()
subarea=StringVar()
new_name_full=StringVar()
subcontractor=StringVar()
masterlist_type=StringVar()
SERIAL_NUMBER=StringVar()
NAME_PROJECT_MCM=StringVar()
MODEL_E=StringVar()
CONTRACT_NUMBER=StringVar()
SUPPORT_LEVEL=StringVar()
SEARCHCODE_MCM=StringVar()
VENDOR_SUPPORT=StringVar()
CUSTOMER_SUPPORT_END_DATE=StringVar()
SUPPLY_TYPE=StringVar()
NEW_NAME_FULL_MCM=StringVar()
AFM_MCM=StringVar()
company_name_mcm=StringVar()
project_mcm_desc=StringVar()
fSEARCHCODE_MCM=StringVar()

#======================= buttons & textboxes ==============================#
l1=Label (page2, font=('arial',9,'bold'),text='''Α.Φ.Μ :''')
e1=Entry(page2, textvariable=afm, bg='lavenderblush', fg='red')
l2=Label (page2, text='''Πελάτης :''')
e2=Entry(page2, textvariable=company_name, state='readonly', readonlybackground='mintcream')
l3=Label (page2, text='''Siebel Code :''')
e3=Entry(page2, textvariable=siebel_customer_code, state='readonly', readonlybackground='mintcream')
b1=Button(page2, text='Search AFM', command=search, fg='blue')
b2=Button(page2, text='Clear AFM', command=clear, fg='red')
l4=Label (page2, font=('arial',9,'bold'),text='''Όνομα Έργου :''')
f1=Entry(page2, textvariable=fname_project1, state='readonly', readonlybackground='mintcream')
l5=Label (page2, font=('arial',9,'bold'),text='''Περιγραφή Έργου :''')
f2=Entry(page2, textvariable=fdescription1, bd=2, width=140, state='readonly', readonlybackground='mintcream')
f3=Entry(page2, textvariable=fname_project2, state='readonly', readonlybackground='mintcream')
f4=Entry(page2, textvariable=fdescription2,  bd=2, width=140, state='readonly', readonlybackground='mintcream')
f5=Entry(page2, textvariable=fname_project3, state='readonly', readonlybackground='mintcream')
f6=Entry(page2, textvariable=fdescription3,  bd=2, width=140, state='readonly', readonlybackground='mintcream')
f7=Entry(page2, textvariable=fname_project4, state='readonly', readonlybackground='mintcream')
f8=Entry(page2, textvariable=fdescription4,  bd=2, width=140, state='readonly', readonlybackground='mintcream')
f9=Entry(page2, textvariable=fname_project5, state='readonly', readonlybackground='mintcream')
f10=Entry(page2, textvariable=fdescription5,  bd=2, width=140, state='readonly', readonlybackground='mintcream')
m1=Label (page2, font=('arial',9,'bold'),text='''Siebel Masterlist''',wraplength=60)
m11=Entry(page2, textvariable=fsb_masterlist1,width=10, state='readonly', readonlybackground='mintcream')
m12=Entry(page2, textvariable=fsb_masterlist2,width=10, state='readonly', readonlybackground='mintcream')
m13=Entry(page2, textvariable=fsb_masterlist3,width=10,   state='readonly', readonlybackground='mintcream')
m14=Entry(page2, textvariable=fsb_masterlist4,width=10, state='readonly', readonlybackground='mintcream')
m15=Entry(page2, textvariable=fsb_masterlist5,width=10,   state='readonly', readonlybackground='mintcream')


l1.grid(row=1, column=0,sticky=E)
e1.grid(row=1, column=1)
l2.grid(row=2, column=0,sticky=E)
e2.grid(row=2, column=1)
l3.grid(row=3, column=0,sticky=E)
e3.grid(row=3, column=1)
b1.grid(row=1, column=2)
b2.grid(row=4, column=0,sticky=E)
l4.grid(row=5, column=0,sticky=E)
f1.grid(row=5, column=1)
l5.grid(row=5, column=2,sticky=E)
f2.grid(row=5, column=3)
f3.grid(row=6, column=1)
f4.grid(row=6, column=3)
f5.grid(row=7, column=1)
f6.grid(row=7, column=3)
f7.grid(row=8, column=1)
f8.grid(row=8, column=3)
f9.grid(row=9, column=1)
f10.grid(row=9, column=3)
m1.grid(row=4, column=4)
m11.grid(row=5, column=4,sticky=E)
m12.grid(row=6, column=4,sticky=E)
m13.grid(row=7, column=4,sticky=E)
m14.grid(row=8, column=4,sticky=E)
m15.grid(row=9, column=4,sticky=E)


lp1=Label (page2, font=('arial',9,'bold'),text='''Κωδ. Κυκλώματος :''')
p1=Entry(page2, textvariable=primary_identifier,bg='lavenderblush',fg='red')
lp2=Label (page2, text='''Επωνυμία :''')
p2=Entry(page2, textvariable=company_name_m, state='readonly', readonlybackground='mintcream')
b3=Button(page2,text='Search PI',command=Search1,fg='blue')
b4=Button(page2, text='Clear PI', command=clear1,fg='red')
lp3=Label (page2, text='''Searchcode :''')
p3=Entry(page2, textvariable=searchcode, state='readonly', readonlybackground='mintcream')
lp4=Label (page2, text='''Hostname :''')
p4=Entry(page2, textvariable=hostname,width=50, state='readonly', readonlybackground='mintcream')
lp5=Label (page2, text='''Όνομα Έργου :''')
p5=Entry(page2, textvariable=name_project_m, state='readonly', readonlybackground='mintcream')
lp6=Label (page2, text='''Siebel Access Type :''')
p6=Entry(page2, textvariable=access_type, state='readonly', readonlybackground='mintcream')
lp7=Label (page2, text='''Siebel IVR Devision :''')
p7=Entry(page2, textvariable=ivr_division, state='readonly', readonlybackground='mintcream')
lp8=Label (page2, text='''Siebel Sub Area :''')
p8=Entry(page2, textvariable=subarea, state='readonly', readonlybackground='mintcream')
lp9=Label (page2, text='''Ονομασία Σημείου :''')
p9=Entry(page2, textvariable=new_name_full, width=60, state='readonly', readonlybackground='mintcream')
lp10=Label (page2, text='''Sub Contractor :''')
p10=Entry(page2, textvariable=subcontractor, width=30, state='readonly', readonlybackground='mintcream')
lp11=Label (page2, text='''Τύπος MasterList :''')
p11=Entry(page2, textvariable=masterlist_type, width=30, state='readonly', readonlybackground='mintcream')

lp1.grid(row=10,column=0,sticky=E)
p1.grid(row=10,column=1)
lp2.grid(row=11,column=0,sticky=E)
p2.grid(row=11,column=1)
b3.grid(row=10,column=2)
b4.grid(row=17,column=0,sticky=E)
lp3.grid(row=12,column=0,sticky=E)
p3.grid(row=12,column=1)
lp4.grid(row=11,column=2,sticky=E)
p4.grid(row=11,column=3,sticky=W)
lp5.grid(row=13,column=0,sticky=E)
p5.grid(row=13,column=1)
lp6.grid(row=14,column=0,sticky=E)
p6.grid(row=14,column=1)
lp7.grid(row=15,column=0,sticky=E)
p7.grid(row=15,column=1)
lp8.grid(row=16,column=0,sticky=E)
p8.grid(row=16,column=1)
lp9.grid(row=12,column=2,sticky=E)
p9.grid(row=12,column=3, sticky=W)
lp10.grid(row=13,column=2,sticky=E)
p10.grid(row=13,column=3, sticky=W)
lp11.grid(row=14,column=2,sticky=E)
p11.grid(row=14,column=3, sticky=W)


lpm1=Label (page2, font=('arial',9,'bold'),text='''Σειριακός Αριθμός :''')
pm1=Entry(page2, textvariable=SERIAL_NUMBER,bg='lavenderblush',fg='red')
lpm2=Label (page2, text='''Όνομα Έργου :''')
pm2=Entry(page2, textvariable=NAME_PROJECT_MCM, state='readonly', readonlybackground='mintcream')
bm3=Button(page2,text='Search SN',command=Search2,fg='blue')
bm4=Button(page2, text='Clear SN', command=clear2,fg='red')
lpm3=Label (page2, text='''Μοντέλο Εξοπλισμού :''')
pm3=Entry(page2, textvariable=MODEL_E, state='readonly', readonlybackground='mintcream')
lpm4=Label (page2, text='''Αριθμός Συμβολαίου :''')
pm4=Entry(page2, textvariable=CONTRACT_NUMBER,width=30, state='readonly', readonlybackground='mintcream')
lpm5=Label (page2, text='''Επίπεδο Υποστήριξης :''')
pm5=Entry(page2, font=('arial',9,'bold'),textvariable=SUPPORT_LEVEL, width=12, state='readonly', readonlybackground='mintcream')
lpm6=Label (page2, text='''Searchcode :''')
pm6=Entry(page2, textvariable=SEARCHCODE_MCM, state='readonly', readonlybackground='mintcream')
lpm7=Label (page2, text='''Vendor Support :''')
pm7=Entry(page2, textvariable=VENDOR_SUPPORT, state='readonly', readonlybackground='mintcream')
lpm8=Label (page2, text='''Υποστήριξη Πελατη έως :''')
pm8=Entry(page2, textvariable=CUSTOMER_SUPPORT_END_DATE, width=11, state='readonly', readonlybackground='mintcream')
lpm9=Label (page2, text='''Τρόπος Διάθεσης :''')
pm9=Entry(page2, textvariable=SUPPLY_TYPE, width=30, state='readonly', readonlybackground='mintcream')
lpm10=Label (page2, text='''Ονομασία Σημείου :''')
pm10=Entry(page2, textvariable=NEW_NAME_FULL_MCM, width=60, state='readonly', readonlybackground='mintcream')
lpm11=Label (page2, text='''Α.Φ.Μ :''')
pm11=Entry(page2, textvariable=AFM_MCM, width=15, state='readonly', readonlybackground='mintcream')
lpm12=Label (page2, text='''Επωνυμία :''')
pm12=Entry(page2, textvariable=company_name_mcm, width=15, state='readonly', readonlybackground='mintcream')
lpm13=Label (page2, text='''Περιγραφή Έργου :''')
pm13=Entry(page2, textvariable=project_mcm_desc, width=140, state='readonly', readonlybackground='mintcream')

lpm1.grid(row=18,column=0,sticky=E)
pm1.grid(row=18,column=1)
lpm2.grid(row=19,column=0,sticky=E)
pm2.grid(row=19,column=1)
bm3.grid(row=18,column=2)
bm4.grid(row=25,column=0,sticky=E)
lpm3.grid(row=20,column=0,sticky=E)
pm3.grid(row=20,column=1)
lpm4.grid(row=19,column=2,sticky=E)
pm4.grid(row=19,column=3,sticky=W)
lpm5.grid(row=21,column=0,sticky=E)
pm5.grid(row=21,column=1,sticky=W)
lpm6.grid(row=22,column=0,sticky=E)
pm6.grid(row=22,column=1)
lpm7.grid(row=23,column=0,sticky=E)
pm7.grid(row=23,column=1)
lpm8.grid(row=24,column=0,sticky=E)
pm8.grid(row=24,column=1, sticky=W)
lpm9.grid(row=20,column=2,sticky=E)
pm9.grid(row=20,column=3, sticky=W)
lpm10.grid(row=21,column=2,sticky=E)
pm10.grid(row=21,column=3, sticky=W)
lpm11.grid(row=22,column=2,sticky=E)
pm11.grid(row=22,column=3, sticky=W)
lpm12.grid(row=23,column=2,sticky=E)
pm12.grid(row=23,column=3, sticky=W)
lpm13.grid(row=24,column=2,sticky=E)
pm13.grid(row=24,column=3, sticky=W)

w1.mainloop()
Reply
#2
could you provide a sample slug of data in an .sql file?
Reply
#3
700 lines of code is too much to trudge through. You declare a class under a function, so the class will be garbage collected when the function exits. Is this what you want? Also, you import tkinter twice and create 2 instances of tk() which is not a good idea. Sometimes it works and sometimes they clash, such as putting something in the wrong tk() instance. Use a Toplevel instead and one instance of tk(). A simple example of creating Toplevels.
try:
    import Tkinter as tk     ## Python 2.x
except ImportError:
    import tkinter as tk     ## Python 3.x

from functools import partial

class OpenToplevels():
    """ open and close additional Toplevels with a button
    """
    def __init__(self):
        self.root = tk.Tk()
        self.button_ctr=0
        but=tk.Button(self.root, text="Open a Toplevel",
                      command=self.open_another)
        but.grid(row=0, column=0)
        tk.Button(self.root, text="Exit Tkinter", bg="red",
                  command=self.root.quit).grid(row=1, column=0, sticky="we")
        self.root.mainloop()

    def close_it(self, id_top):
        id_top.destroy()

    def open_another(self):
        self.button_ctr += 1
        id_top = tk.Toplevel(self.root)
        id_top.title("Toplevel #%d" % (self.button_ctr))
        tk.Button(id_top, text="Close Toplevel #%d" % (self.button_ctr),
                  command=partial(self.close_it, id_top),
                  bg="orange", width=20).grid(row=1, column=0)

Ot=OpenToplevels()  
Reply
#4
I followed your suggestion using Toplevel/partial and the result was the expected one. Thanks a lot!!!!
Reply
#5
By modifing my gui with the above TopLevel code, i have another problem. I want to pass inside the class that generates the Top level window the entry of text value (=pm6 textbox, line 200) that results after executing the first query (of main gui = w1, lines 22-23...). I set pm6 as a global variable (if it is not mistaken as a code), but the second query (inside the class) that gets pm6 value doesn't bring anything (line 133).

I need to set pm6 inside the toplevel class as a variable?

from tkinter import*
from tkinter import messagebox
import time
from datetime import datetime
from tkinter import ttk
import tkinter.messagebox as box
import tkinter as tk
import tkinter.font as tkFont
import tkinter.ttk as ttk1
import tkinter as tk2
from functools import partial
import cx_Oracle


def search():
 try:
   connstr='SOLVATIO/SOLVATIO@localhost'
   conn = cx_Oracle.connect(connstr)
   curs3=conn.cursor()
   curs5=conn.cursor()
   curs7=conn.cursor()
   curs3.execute("select  NAME_PROJECT_MCM,MODEL_E,CONTRACT_NUMBER,SUPPORT_LEVEL,SEARCHCODE_MCM,VENDOR_SUPPORT,"
                      +"to_char(customer_support_end_date, 'dd/mm/yyyy'),SUPPLY_TYPE,NEW_NAME_FULL_MCM, AFM_MCM, company_name_mcm from customer_mcm where SERIAL_NUMBER='%s'"%SERIAL_NUMBER.get())  
   results3=curs3.fetchone()
   NAME_PROJECT_MCM.set(results3[0])
   MODEL_E.set(results3[1])
   CONTRACT_NUMBER.set(results3[2])
   SUPPORT_LEVEL.set(results3[3])
   SEARCHCODE_MCM.set(results3[4])
   fSEARCHCODE_MCM=(results3[4])
   VENDOR_SUPPORT.set(results3[5])
   CUSTOMER_SUPPORT_END_DATE.set(results3[6])
   SUPPLY_TYPE.set(results3[7])
   NEW_NAME_FULL_MCM.set(results3[8])
   AFM_MCM.set(results3[9])
   company_name_mcm.set(results3[10])

 except:
    messagebox.showinfo('Μύνημα', 'No such data')

def clear2():
   SERIAL_NUMBER.set('')
   NAME_PROJECT_MCM.set('')
   MODEL_E.set('')
   CONTRACT_NUMBER.set('')
   SUPPORT_LEVEL.set('')
   SEARCHCODE_MCM.set('')
   VENDOR_SUPPORT.set('')
   CUSTOMER_SUPPORT_END_DATE.set('')
   SUPPLY_TYPE.set('')
   NEW_NAME_FULL_MCM.set('')
   AFM_MCM.set('')
   project_mcm_desc.set('')
   company_name_mcm.set('')    
#============================================================#
w1=Tk()
w1.title('GUI Special Solutions')
w1.geometry('1500x800+0+0')

pm6=IntVar()


#===============================Top Level=============================#
class OpenToplevels():
    """ open and close additional Toplevels with a button
    """
    
    def __init__(self):
        self.tree = None
        self.root = tk2.Tk()
        self.button_ctr=0
        but=tk2.Button(w1, text="Open a Toplevel",
                      command=self.open_another)
        but.grid(row=10, column=0)

 
    def close_it(self, id_top,container):
        id_top.destroy()
        container.destroy()
        self.button_ctr=0
        
    def open_another(self):
       self.button_ctr += 1
       if self.button_ctr==1:
        id_top = tk2.Toplevel(self.root)
        id_top.title("Toplevel #%d" % (self.button_ctr))
        container = ttk1.Frame(id_top)
        container.grid()
        # create a treeview with dual scrollbars
        self.tree = ttk1.Treeview(id_top,columns=car_header, show="headings")
        vsb = ttk1.Scrollbar(id_top,orient="vertical",
            command=self.tree.yview)
        hsb = ttk1.Scrollbar(id_top,orient="horizontal",
            command=self.tree.xview)
        self.tree.configure(yscrollcommand=vsb.set,
            xscrollcommand=hsb.set)
        self.tree.grid(column=0, row=0, sticky='nsew', in_=container)
        vsb.grid(column=1, row=0, sticky='ns', in_=container)
        hsb.grid(column=0, row=1, sticky='ew', in_=container)
        container.grid_columnconfigure(0, weight=1)
        container.grid_rowconfigure(0, weight=1)
        tk2.Button(id_top, text="Close Toplevel #%d" % (self.button_ctr),
                  command=partial(self.close_it, id_top,container),
                  bg="orange", width=20).grid(row=1, column=0)

        
        for col in car_header:
            self.tree.heading(col, text=col.title(),
                command=lambda c=col: sortby(self.tree, c, 0))
            # adjust the column's width to the header string
            self.tree.column(col,
                width=tkFont.Font().measure(col.title()))
 
        for item in car_list:
            self.tree.insert('', 'end', values=item)
 
        def sortby(tree, col, descending):
            """sort tree contents when a column header is clicked on"""
    # grab values to sort
            data = [(tree.set(child, col), child) \
             for child in tree.get_children('')]
            data.sort(reverse=descending)
            for ix, item in enumerate(data):
               tree.move(item[1], '', ix)
    # switch the heading so it will sort in the opposite direction
            tree.heading(col, command=lambda col=col: sortby(tree, col, \
            int(not descending)))
 

connstr='SOLVATIO/SOLVATIO@localhost'
conn = cx_Oracle.connect(connstr)
cursw = conn.cursor()
cursw.execute("select NAME_PROJECT_MCM, MODEL_E, CONTRACT_NUMBER , SERIAL_NUMBER,company_name_mcm, searchcode_mcm  from customer_mcm where searchcode_mcm='%s'"%pm6.get())      
car_list=list(cursw.fetchall())
car_header = ['NAME_PROJECT_MCM', 'MODEL_E', 'CONTRACT_NUMBER' , 'SERIAL_NUMBER','company_name_mcm', 'searchcode_mcm']


Ot=OpenToplevels()

#============================================================#

SERIAL_NUMBER=StringVar()
NAME_PROJECT_MCM=StringVar()
MODEL_E=StringVar()
CONTRACT_NUMBER=StringVar()
SUPPORT_LEVEL=StringVar()
SEARCHCODE_MCM=StringVar()
VENDOR_SUPPORT=StringVar()
CUSTOMER_SUPPORT_END_DATE=StringVar()
SUPPLY_TYPE=StringVar()
NEW_NAME_FULL_MCM=StringVar()
AFM_MCM=StringVar()
company_name_mcm=StringVar()
project_mcm_desc=StringVar()
fSEARCHCODE_MCM=StringVar()

#============================================================#

lpm1=Label (w1, font=('arial',9,'bold'),text='''Σειριακός Αριθμός :''')
pm1=Entry(w1, textvariable=SERIAL_NUMBER,bg='lavenderblush',fg='red')
lpm2=Label (w1, text='''Όνομα Έργου :''')
pm2=Entry(w1, textvariable=NAME_PROJECT_MCM, state='readonly', readonlybackground='mintcream')
bm3=Button(w1,text='Search SN',command=search,fg='blue')
bm4=Button(w1, text='Clear SN', command=clear2,fg='red')
lpm3=Label (w1, text='''Μοντέλο Εξοπλισμού :''')
pm3=Entry(w1, textvariable=MODEL_E, state='readonly', readonlybackground='mintcream')
lpm4=Label (w1, text='''Αριθμός Συμβολαίου :''')
pm4=Entry(w1, textvariable=CONTRACT_NUMBER,width=30, state='readonly', readonlybackground='mintcream')
lpm5=Label (w1, text='''Επίπεδο Υποστήριξης :''')
pm5=Entry(w1, font=('arial',9,'bold'),textvariable=SUPPORT_LEVEL, width=12, state='readonly', readonlybackground='mintcream')
lpm6=Label (w1, text='''Searchcode :''')
pm6=Entry(w1, textvariable=SEARCHCODE_MCM, state='readonly', readonlybackground='mintcream')
lpm7=Label (w1, text='''Vendor Support :''')
pm7=Entry(w1, textvariable=VENDOR_SUPPORT, state='readonly', readonlybackground='mintcream')
lpm8=Label (w1, text='''Υποστήριξη Πελατη έως :''')
pm8=Entry(w1, textvariable=CUSTOMER_SUPPORT_END_DATE, width=11, state='readonly', readonlybackground='mintcream')
lpm9=Label (w1, text='''Τρόπος Διάθεσης :''')
pm9=Entry(w1, textvariable=SUPPLY_TYPE, width=30, state='readonly', readonlybackground='mintcream')
lpm10=Label (w1, text='''Ονομασία Σημείου :''')
pm10=Entry(w1, textvariable=NEW_NAME_FULL_MCM, width=60, state='readonly', readonlybackground='mintcream')
lpm11=Label (w1, text='''Α.Φ.Μ :''')
pm11=Entry(w1, textvariable=AFM_MCM, width=15, state='readonly', readonlybackground='mintcream')
lpm12=Label (w1, text='''Επωνυμία :''')
pm12=Entry(w1, textvariable=company_name_mcm, width=15, state='readonly', readonlybackground='mintcream')

 
lpm1.grid(row=18,column=0,sticky=E)
pm1.grid(row=18,column=1)
lpm2.grid(row=19,column=0,sticky=E)
pm2.grid(row=19,column=1)
bm3.grid(row=18,column=2)
bm4.grid(row=25,column=0,sticky=E)
lpm3.grid(row=20,column=0,sticky=E)
pm3.grid(row=20,column=1)
lpm4.grid(row=19,column=2,sticky=E)
pm4.grid(row=19,column=3,sticky=W)
lpm5.grid(row=21,column=0,sticky=E)
pm5.grid(row=21,column=1,sticky=W)
lpm6.grid(row=22,column=0,sticky=E)
pm6.grid(row=22,column=1)
lpm7.grid(row=23,column=0,sticky=E)
pm7.grid(row=23,column=1)
lpm8.grid(row=24,column=0,sticky=E)
pm8.grid(row=24,column=1, sticky=W)
lpm9.grid(row=20,column=2,sticky=E)
pm9.grid(row=20,column=3, sticky=W)
lpm10.grid(row=21,column=2,sticky=E)
pm10.grid(row=21,column=3, sticky=W)
lpm11.grid(row=22,column=2,sticky=E)
pm11.grid(row=22,column=3, sticky=W)
lpm12.grid(row=23,column=2,sticky=E)
pm12.grid(row=23,column=3, sticky=W)
mainloop()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Tkinter] Scrollbar, Frame and size of Frame Maksim 2 9,003 Sep-30-2019, 07:30 AM
Last Post: Maksim
  [Tkinter] create and insert a new frame on top of another frame atlass218 4 11,113 Apr-18-2019, 05:36 PM
Last Post: atlass218
  [Tkinter] Frame size only works if frame is empty(Solved) Tuck12173 7 6,446 Jan-29-2018, 10:44 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

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