Python 编辑PySimpleGUI中的设计元素和按钮故障
我正在构建一个DB比较器工具,它根据用户输入进行比较,并使用Datacompy显示结果 它分为两个窗口Python 编辑PySimpleGUI中的设计元素和按钮故障,python,pandas,pysimplegui,Python,Pandas,Pysimplegui,我正在构建一个DB比较器工具,它根据用户输入进行比较,并使用Datacompy显示结果 它分为两个窗口 从用户处获取详细信息 将比较结果提供给用户 如何创建下拉框。 在FileBrowse元素下面的第二个窗口中,我想创建一个下拉列表,其中保存用户将要上载的excel文件中的值 Excel将包含两列(表名和SQL) 我想将所有表名放入下拉框 我怎样才能继续呢 代码运行得非常好,但这是我正在努力的设计,也是使工具变得更加完美的几个悬而未决的问题 我想要实现的设计: 若你们在附件中看到我正在努力实现
不确定您的问题是什么,以下代码仅供参考 为
sg.Text
设置具有相同值的选项size
,以保持所有sg.Text
具有相同的大小。
在sg.Window
中添加选项modal=True
,以保持父窗口不接受键盘和鼠标事件
将PySimpleGUI导入为sg
def popup():
布局=[
[sg.Text('File 1')、sg.InputText()、sg.FileBrowse()],
[sg.Output(大小=(80,25),键='-Output-')],
[sg.Submit('Compare')、sg.Button('Exit')],
]
window=sg.window('File Compare',layout,modal=True)
尽管如此:
事件,值=window.read()
打印(事件、值)
如果事件发生(sg.WINDOW_关闭,“退出”):
打破
window.close()
返回
sg.theme(“暗蓝色3”)
sg.set_选项()
DB_信用卡_one=[
[sg.Text(“UserName”,size=(10,1)),sg.In(size=(25,1),enable_events=True,key=“-uname_db1-”,
[sg.Text(“Password”,size=(10,1)),sg.In(size=(25,1),enable_events=True,key=“-pword_db1-”,
[sg.Text(“主机名”,大小=(10,1)),sg.In(大小=(25,1),enable_events=True,key=“-hname_db1-”,
[sg.Text(“Server”,size=(10,1)),sg.In(size=(25,1),enable_events=True,key=“-sname_db1-”,
[sg.Text(“Port”,size=(10,1)),sg.In(size=(25,1),enable_events=True,key=“-Port_db1-”,
[sg.B('Test Con1',key='B1')],
]
db_creds_two=[
[sg.Text(“UserName”,size=(10,1)),sg.In(size=(None,5),enable_events=True,key=“-uname_db2-”,
[sg.Text(“Password”,size=(10,1)),sg.In(size=(None,5),enable_events=True,key=“-pword_db2-”,
[sg.Text(“主机名”,大小=(10,1)),sg.In(大小=(无,5),enable_events=True,key=“-hname_db2-”,
[sg.Text(“Server”,size=(10,1)),sg.In(size=(None,5),enable_events=True,key=“-sname_db2-”,
[sg.Text(“Port”,size=(10,1)),sg.In(size=(None,5),enable_events=True,key=“-Port_db2-”,
[sg.B('Test Con2',key='B2')],
]
布局前缀=[
[
sg.柱(DB_creds_one),
sg.VSeperator(),
sg.柱(db_creds_2),
],
[sg.Output(大小=(80,25),键='-Output-')],
[sg.提交(“继续”),sg.按钮(“退出”),
]
window=sg.window(“DB比较器”,布局前缀)
尽管如此:
事件,值=window.read()
如果事件==sg.WIN\u已关闭或事件=='Exit'或事件=='Cancel':
secongwindow=False
打破
elif事件==“继续”:
结果=弹出()
window.close()
如果您的问题只出现在GUI上,最好将您的代码减少为仅关于GUI。解决了最后两个问题(在编辑中
)更适合类似的门户。第二个窗口有按钮退出
,但我没有看到关闭它的代码。我没有看到compare\u window.close()
代码中的缩进错误。我看不出你是如何打开第二个窗口的——它没有任何功能。所以我无法运行它来查看问题。
import PySimpleGUI as sg
import re
import datacompy
import cx_Oracle
import pandas as pd
supportedextensions = ['csv','xlsx', 'xlsm' ,'json']
#Database Details Layout
DB_creds_one = [
[ sg.Text("UserName"), sg.In(size=(25, 1), enable_events=True, key="-uname_db1-") ],
[ sg.Text("Password"), sg.In(size=(25, 1), enable_events=True, key="-pword_db1-") ],
[ sg.Text("Hostname"), sg.In(size=(25, 1), enable_events=True, key="-hname_db1-") ],
[ sg.Text("Server"), sg.In(size=(25, 1), enable_events=True, key="-sname_db1-") ],
[ sg.Text("Port"), sg.In(size=(25, 1), enable_events=True, key="-port_db1-") ],
[ sg.B('Test Con1', key='B1') ],
]
db_creds_two = [
[ sg.Text("UserName"), sg.In(size=(None,5),enable_events=True, key="-uname_db2-") ],
[ sg.Text("Password"), sg.In(size=(None,5), enable_events=True, key="-pword_db2-") ],
[ sg.Text("Hostname"), sg.In(size=(None,5), enable_events=True, key="-hname_db2-") ],
[ sg.Text("Server"), sg.In(size=(None,5), enable_events=True, key="-sname_db2-") ],
[ sg.Text("Port"), sg.In(size=(None,5), enable_events=True, key="-port_db2-") ],
[ sg.B('Test Con2',key='B2') ],
]
layoutprefile = [
[
sg.Column(DB_creds_one),
sg.VSeperator(),
sg.Column(db_creds_two),
],
[sg.Output(size=(80, 25), key='-output-')],
[sg.Submit('Proceed'), sg.Button('Exit')]
]
window = sg.Window("DB Comparator", layoutprefile)
# default values at start
secondwindow = True
Test_DB1 = False
Test_DB2 = False
while True: # The Event Loop
event, values = window.read()
# print(event, values) # debug
if event == sg.WIN_CLOSED or event == 'Exit' or event == 'Cancel':
secongwindow = False
break
if secondwindow == False:
exit()
else :
layoutpostfile = [
[sg.Text('File 1'), sg.InputText(), sg.FileBrowse()],
[sg.Output(size=(80, 25), key='-output-')],
[sg.Submit('Compare'), sg.Button('Exit')]
]
compare_window = sg.Window('File Compare', layoutpostfile)
filecheck = False
window.close()