PySimpleGUI 强制文本框旁边的日历框

PySimpleGUI force calendar box next to text box

我有一个 GUI,输出弹出式日历中所选日期的文本框不在日历按钮旁边,这不是我想要的,理想情况下它们应该并排。

代码:

import PySimpleGUI as sg
import datetime
from datetime import date

columns = ["TYPE","DIRECTION","DATE","OPTION"]
param = (20,3) # size of the main window

def GUI():
   sg.theme('Dark Brown 1')
   listing = [sg.Text(u, size = param) for u in columns]
   core = [
   sg.Listbox(['ETF', 'EQT', 'FUT', 'OPT', 'BOND'],enable_events=False,key='_PLAYERS20_',size = (20,2)),
   sg.Listbox( ['B', 'S'],size = (20,1),enable_events=False,key='_PLAYERS12_'),
   sg.CalendarButton('Calendar', pad=None, font=('MS Sans Serif', 10, 'bold'), 
                button_color=('yellow', 'brown'), format=('%d/%m/%Y'),  key='_CALENDAR_', target='_INP_'),
   sg.Listbox(['C', 'P', 'N/A'],size = param)]
   

   mesh = [[x,y] for (x,y) in list(zip(listing, core))]
   mesh[3].append(sg.Input(size = (10,2),key = '_INP_'))
   layout =[[sg.Button("SEND"),sg.Button("NEW_NAME"), sg.Button("NEW_STRAT"), sg.Button("NEW_UND")] ]+ mesh
   window = sg.Window('Trade Entry System', layout, font='Courier 12').Finalize()
   
   while True:
      event, values = window.read()
      if event == "SEND":
        break
      elif event == "NEW_NAME" :
         continue
      elif event == "NEW_STRAT":
         continue
      elif event == "NEW_UND":
         continue
      else:
         print("OVER")
         break
   window.close()

GUI()

Python 从 0 开始计数,所以您的日历按钮是元素 2,而不是元素 3。

mesh[2].append(sg.Input(size = (10,2),key = '_INP_'))

[0] sg.Listbox( ['ETF', 'EQT', 'FUT', 'OPT', 'BOND'], ... ),
[1] sg.Listbox( ['B', 'S'], ... ),
[2] sg.CalendarButton( 'Calendar', ... ),
[3] sg.Listbox( ['C', 'P', 'N/A'], ... ]