成績表
python 新手,正在做一個關于學生分數管理系統的學校專案。
當我單擊表格行時,我想更新右側視窗上的文本以與學生的姓名相對應。
我應該在我的事件回圈中添加什么來實作這一點?
import PySimpleGUI as sg
nameDict = {'A1': 'Albedo',
'A2': 'Barbara',
'A3': 'Chongyun',
'A4': 'Diluc',
'A5': 'Eula',
'A6': 'Fischl',
'A7': 'Ganyu',
'A8': 'Hu Tao',
'A9': 'Jean',
'A10': 'Kazuha'}
nameList = [[1, nameDict["A1"], 3.5],
[2, nameDict["A2"], 3.5],
[3, nameDict["A3"], 3.5],
[4, nameDict["A4"], 3.5],
[5, nameDict["A5"], 3.5],
[6, nameDict["A6"], 3.5],
[7, nameDict["A7"], 3.5],
[8, nameDict["A8"], 3.5],
[9, nameDict["A9"], 3.5],
[10, nameDict["A10"], 3.5]]
headings = ['Index', 'Name', 'Cumulative GPA']
activeStudent = [
[sg.Text("Name:"),sg.Text('',enable_events=True,key='-activeStudent-')],
[sg.Text("Math Result:"), sg.Text('', enable_events=True, key='-math-')],
[sg.Text("English Result:"), sg.Text('', enable_events=True, key='-english-')],
[sg.Text("Science Result:"), sg.Text('', enable_events=True, key='-science-')],
]
result = [
[sg.Table(values=nameList, headings=headings, max_col_width=100,
auto_size_columns=True,
display_row_numbers=False,
justification='center',
num_rows=10,
key='hello',
row_height=55,
tooltip='Results',
enable_click_events=True),sg.Frame('',activeStudent,size=(800,550))],
]
resultsWindow = sg.Window("Register Results", result, size=(1000, 500), finalize=True, )
while True:
event, values = resultsWindow.read()
if event == "Submit" or event == sg.WIN_CLOSED:
break
uj5u.com熱心網友回復:
我認為,您的第一個問題是在sg.table而不是
enable_click_events=True
它應該是:
enable_events=True
這樣,您可以捕捉事件hello,您將獲得您想要的元素,如下所示:
if event == "Submit" or event == sg.WIN_CLOSED:
break
elif event == "hello":
data_selected = [nameList[row] for row in values[event]]
print(data_selected) # an array like this [[6, 'Fischl', 4.0]]
resultsWindow['-activeStudent-'].update(data_selected[0][1])
else:
continue
現在,它已經寫在上面的代碼中,但是要更新 sg.frame 這樣做:
resultsWindow['-activeStudent-'].update(data_selected[0][1])
您必須根據要更新的內容更改-key-。
我用于測驗的整個代碼:
import PySimpleGUI as sg
nameDict = {'A1': 'Albedo',
'A2': 'Barbara',
'A3': 'Chongyun',
'A4': 'Diluc',
'A5': 'Eula',
'A6': 'Fischl',
'A7': 'Ganyu',
'A8': 'Hu Tao',
'A9': 'Jean',
'A10': 'Kazuha'}
nameList = [[1, nameDict["A1"], 3.5],
[2, nameDict["A2"], 3.6],
[3, nameDict["A3"], 3.7],
[4, nameDict["A4"], 3.8],
[5, nameDict["A5"], 3.9],
[6, nameDict["A6"], 4.0],
[7, nameDict["A7"], 4.1],
[8, nameDict["A8"], 4.2],
[9, nameDict["A9"], 4.3],
[10, nameDict["A10"], 4.4]]
headings = ['Index', 'Name', 'Cumulative GPA']
activeStudent = [
[sg.Text("Name:"), sg.Text('', enable_events=True,key='-activeStudent-')],
[sg.Text("Math Result:"), sg.Text('', enable_events=True, key='-math-')],
[sg.Text("English Result:"), sg.Text('', enable_events=True, key='-english-')],
[sg.Text("Science Result:"), sg.Text('', enable_events=True, key='-science-')],
]
result = [
[sg.Table(values=nameList, headings=headings, max_col_width=100,
auto_size_columns=True,
display_row_numbers=False,
justification='center',
num_rows=10,
key='hello',
row_height=55,
tooltip='Results',
enable_events=True), sg.Frame('', activeStudent, size=(800, 550))],
]
resultsWindow = sg.Window("Register Results", result, size=(1000, 500), finalize=True, )
while True:
event, values = resultsWindow.read()
if event == "Submit" or event == sg.WIN_CLOSED:
break
elif event == "hello":
data_selected = [nameList[row] for row in values[event]]
print(data_selected)
resultsWindow['-activeStudent-'].update(data_selected[0][1])
else:
continue
祝你好運。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456498.html
上一篇:在回圈內更新標簽。PyQT
