Как отобразить виджет вкладки после меню панели инструментов в Python? - PullRequest
0 голосов
/ 23 октября 2019

Я новичок в этом меню tkinter. Я пытаюсь загрузить и отобразить файл Excel, используя ' filemenu ' в строке меню и ' btnNew ' в меню панели инструментов.

Приложение запустилось, но оно не отображает мой файл Excel после просмотра файла. Приложение отображает только типы данных каждой переменной в файле Excel.

import pandas as pd
import xlrd
import tkinter as tk

from tkinter import  Frame, Menu, Button, Label, Canvas
from tkinter import LEFT, RIGHT, TOP, BOTTOM, X, FLAT, RAISED
from tkinter import filedialog
from tkinter import ttk

root = tk.Tk() #main method 1 - create main window (parent window)
root.title("Data Visualisation")
width = 1000
height = 500
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width / 2) - (width / 2)
y = (screen_height / 2) - (height / 2)
root.geometry('%dx%d+%d+%d' % (width, height, x, y))
root.resizable(1,1)

def browseFile():
    global workbook, copyWorkbook, excel_file, sheetName, worksheet

    fileName = filedialog.askopenfilename(initialdir = '/', title = 'New File', filetypes = (('excel file', '.xlsx'), ('excel file', '.xls'), ('all files', '*.*')))
    excel_file = pd.ExcelFile(fileName)
    workbook = xlrd.open_workbook(fileName)
    sheetCount = workbook.nsheets

    #Create tabs
    sheetName = []
    tab = []

    for x in range(workbook.nsheets):
        tab.append(ttk.Frame(tabControl))
        sheetName = workbook.sheet_names()
        tabControl.add(tab[x], text = sheetName[x])
        df_table = excel_file.parse(sheetName[x])
        print(df_table.dtypes)
        lblTable = Label(tab[x], text = df_table.to_string(index = False)).grid()
        btnGraph = Button(tab[x], text = "Graph").grid(sticky = 'w', column = 1, row = 5)

##MENU BAR
menubar = Menu(root)
root.config(menu = menubar)

#FILE MENU
filemenu = Menu(menubar, bg = '#BFBFBF', tearoff = 0)
menubar.add_cascade(label = 'File', menu = filemenu)

filemenu.add_command(label = 'New', compound = LEFT, command = browseFile)
filemenu.add_command(label = 'Open...', compound = LEFT)
filemenu.add_separator()
filemenu.add_command(label = 'Quit', compound = LEFT, command = root.quit)

#SEARCH MENU
searchmenu = Menu(menubar, bg = '#BFBFBF')
menubar.add_cascade(label = 'Search', menu = searchmenu)
searchmenu.add_command(label = 'Find...', compound = LEFT)
searchmenu.add_command(label = 'Replace...', compound = LEFT)

#HELP MENU
helpmenu = Menu(menubar, bg = '#BFBFBF')
menubar.add_cascade(label = 'Help', menu = helpmenu)
helpmenu.add_command(label = 'About', compound = LEFT)

##TOOLBAR MENU
toolbar = Frame(root, bd = 1, relief = RAISED)

#To browse excel file
btnNew = Button(toolbar, text = 'New', compound = TOP, relief = FLAT, activebackground = '#ADD8E6', padx = 20, pady = 2, command = browseFile).pack(side = LEFT)
btnOpen = Button(toolbar, text = 'Open', compound = TOP, relief = FLAT, activebackground = '#ADD8E6', padx = 10, pady = 2).pack(side = LEFT)
btnFind = Button(toolbar, text = 'Find', compound = TOP, relief = FLAT, activebackground = '#ADD8E6', padx = 10, pady = 2).pack(side = LEFT)
btnReplace = Button(toolbar, text = 'Replace', compound = TOP, relief = FLAT, activebackground = '#ADD8E6', padx = 10, pady = 2).pack(side = LEFT)
btnQuit = Button(toolbar, text = 'Quit', compound = TOP, relief = FLAT, activebackground = '#ADD8E6', padx = 10, pady = 2, command = root.quit).pack(side = RIGHT)
toolbar.pack(side = TOP, fill = X)

###Tab Widget
tabControl = ttk.Notebook(menubar)
tabHome = ttk.Frame(tabControl)
tabControl.add(tabHome, text = "Home")

#All the automation Tab is pack here
tabControl.pack(expand = 1, fill = 'both', side = LEFT)

root.mainloop() #main method 2 - run the application

Приложение должно отображать вкладки и на каждой вкладке должно содержать каждый лист из файла Excel. Все вкладки должны отображаться после меню панели инструментов.

Я не уверен, в чем проблема, поскольку она не указывает, есть ли какая-либо ошибка в моем коде.

Все отзывы приветствуютсякак я пытаюсь узнать, как сделать лучший интерфейс с помощью Python. Спасибо за помощь: D

1 Ответ

0 голосов
/ 23 октября 2019

Вы установили неправильный родительский элемент для фрейма tabControl.

Изменение:

tabControl = ttk.Notebook(menubar)

на:

tabControl = ttk.Notebook(root)
...