Как выровнять строки из двух кадров в tkinter? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть два кадра в tkinter. У одного из них есть метки, а у другого - текстовые поля и кнопки. Когда пользователь нажимает кнопку, дополнительные поля добавляются горизонтально во втором кадре. Оба кадра связаны с одной вертикальной полосой прокрутки, а второй кадр имеет собственную горизонтальную полосу прокрутки. Как сделать так, чтобы первая строка первого кадра была выровнена с первой строкой второго кадра?

Misaligned labels

Я хотел бы поля для выравнивания с метками A, B, C

from tkinter import *
import pyodbc  # Importing for storing in a DB
from tkinter import messagebox
import getpass
import os
from datetime import datetime
from tkinter import ttk
import win32com.client
import openpyxl

from openpyxl import load_workbook
from tkcalendar import Calendar, DateEntry

global totalItems
global itemNum
global sizeList
global typeList
global qtyList
global actualQtyList

actualQtyList=[]

itemNum=0

def myfunction(event):
    #canvas.configure(scrollregion=canvas.bbox("all"),height=650)
    canvas.configure(scrollregion=canvas.bbox("all"), height=630)
def myfunction2(event):
    canvasForCustomers.configure(scrollregion=canvasForCustomers.bbox("all"),height=645,width=900)
def multiple_yview(*args):
    canvas.yview(*args)
    canvasForCustomers.yview(*args)


def addNewCustomer():
    global totalItems
    global itemNum
    padxValue=0
    lbFrame_Customer=ttk.LabelFrame(frameForOfferCreationFilter,text="Customer")
    cb_customer=ttk.Combobox(lbFrame_Customer,state='readonly',values=customerList,width=6)
    cb_customer.grid(row=0,column=0)

    lbFrame_ShipDate=ttk.LabelFrame(frameForOfferCreationFilter,text="Ship Date")
    cal_ShipDate=DateEntry(lbFrame_ShipDate)
    cal_ShipDate.grid(row=0,column=0)

    lbFrame_PackedDateRange=ttk.LabelFrame(frameForOfferCreationFilter,text="Packed Date Range")
    cal_FromDate=DateEntry(lbFrame_PackedDateRange)
    lb_hyphen=ttk.Label(lbFrame_PackedDateRange,text="-")
    cal_ToDate = DateEntry(lbFrame_PackedDateRange)
    cal_FromDate.grid(row=0,column=0)
    lb_hyphen.grid(row=0,column=1)
    cal_ToDate.grid(row=0,column=2)

    lbFrame_Customer.grid(row=0,column=itemNum,columnspan=1,padx=padxValue)
    lbFrame_ShipDate.grid(row=0,column=itemNum+1,columnspan=1,padx=padxValue)
    lbFrame_PackedDateRange.grid(row=0,column=itemNum+2,columnspan=2,padx=padxValue)

    lb_CaseSize = ttk.Label(frameForOfferCreationFilter, text="Case Size", justify="center").grid(row=1, column=itemNum,padx=padxValue)

    if itemNum%2!=0:
        padxValue=20
    else:
        padxValue=0

    indexNum=0
    if indexNum%2==0:
        padyValue2=0
    else:
        padyValue2=5
    # frameForOfferCreation=Frame(canvasForCustomers,bg='yellow')
    # frameForOfferCreation.grid(row=2,column=0,columnspan=6)
    for indexNum in range(totalItems):
        txt_CaseSize = ttk.Entry(frameForOfferCreationItems, width=7)
        txt_CaseSize.grid(row=indexNum, column=itemNum, padx=10+padxValue,pady=padyValue2,sticky=S)

        if indexNum % 2 == 0:
            padyValue2 = 4
        else:
            padyValue2 = 0

    itemNum = itemNum + 7




root_1 = Tk()
w, h = root_1.winfo_screenwidth(), root_1.winfo_screenheight()
root_1.geometry("%dx%d+0+0" % (w, h))
root_1.title("Sales Allocation Application")
allItems=['A','B','C']
############################ Getting Customers

allCustomers=['X','Y','Z']


customerList=[]
for item in allCustomers:
    customerList.append(item[0])


tab_parent = ttk.Notebook(root_1)
tab_parent.pack(expand=1, fill='both')

tab_OfferPage = ttk.Frame(tab_parent)
tab_EditPage=ttk.Frame(tab_parent)
# tab_AllOffers = ttk.Frame(tab_parent)

tab_parent.add(tab_OfferPage, text='Create New Offer')
tab_parent.add(tab_EditPage,text="Edit Existing Offers")

lbFrm_ExistingItems=ttk.LabelFrame(tab_OfferPage,text="Items")
lbFrm_ExistingItems.pack(expand=1,fill='both')
canvas = Canvas(lbFrm_ExistingItems,width=300,height=650)  # ,bg="#F4F3F1") width 400
canvas.grid(row=0, column=0,sticky=N)
frameOfItems = Frame(canvas,bg='green')
scrollBar = ttk.Scrollbar(lbFrm_ExistingItems, orient="vertical", command=multiple_yview)  # canvas.yview)
canvas.configure(yscrollcommand=scrollBar.set)
frameOfItems.bind("<Configure>", myfunction)
scrollBar.grid(row=0, column=0, sticky=N + S + W)  # , sticky=N + S + W)
canvas.create_window((0, 0), window=frameOfItems, anchor='nw')

canvasForCustomers=Canvas(lbFrm_ExistingItems,bg="red",width=900)
canvasForCustomers.grid(row=0, column=1,sticky=N+S)
frameForOfferCreationItems=Frame(canvasForCustomers,bg='pink')
frameForOfferCreationItems.bind("<Configure>", myfunction2)
frameForOfferCreationFilter=Frame(canvasForCustomers,bg='yellow')
frameForOfferCreationFilter.bind("<Configure>", myfunction2)
canvasForCustomers.create_window((0,0),window=frameForOfferCreationFilter,anchor='nw')
canvasForCustomers.create_window((0,80),window=frameForOfferCreationItems,anchor='nw')


btn_addCustomer=ttk.Button(lbFrm_ExistingItems,text="Add\nCustomer",command=addNewCustomer).grid(row=0,column=2,sticky=N+E)
btn_loadExisting=ttk.Button(lbFrm_ExistingItems,text="Load Existing\nOpen Offers").grid(row=0,column=3,sticky=N+E)

totalItems=len(allItems)

scrollBarHorizontal = ttk.Scrollbar(lbFrm_ExistingItems, orient="horizontal", command=canvasForCustomers.xview)
canvasForCustomers.configure(xscrollcommand=scrollBarHorizontal.set)
scrollBarHorizontal.grid(row=1, column=1, sticky=E + W+S)
canvasForCustomers.configure(yscrollcommand=scrollBar.set)

qtyList=[]
for item in allItems:
    qtyList.append(Label(frameOfItems,text=item[0]))
    actualQtyList.append(item[0])


lb_Qty=ttk.Label(frameOfItems,text="Quantity").grid(row=0,column=1,pady=10)

lb_LineBreak=ttk.Label(frameOfItems,text="  ").grid(row=1,column=0,columnspan=4,pady=12)
##### Adding blank label to attempt alignement
rowNum=2
padyValue=7

for item in range(len(qtyList)):
    qtyList[item].grid(row=rowNum,column=4,pady=padyValue)

    rowNum=rowNum+1
    if rowNum%2==0:
        padyValue=7
    else:
        padyValue=0



root_1.mainloop()

1 Ответ

1 голос
/ 26 апреля 2020

Tkinter - довольно низкоуровневый фреймворк GUI. Я бы предложил одну из библиотек из здесь , так как они значительно облегчат вашу жизнь.

...