如何 return 格式字符串以及为什么我的按钮不显示?
How to return a format string and why my button don't show up?
我想要这样显示值This is what I want when I select 10 in listbox, but It show like this when I trying Now what its look like我找不到使用 f-string 设置它格式的方法,我还添加了一个名为“测试你自己”的按钮,在我按下它之后将使列表框(可见=假)但我不知道为什么我可以使按钮(可见=真)任何人都可以告诉我我在哪里编码错误吗?
from tkinter.constants import CHAR
import PySimpleGUI as sg
from PySimpleGUI.PySimpleGUI import Exit
def corecode(base):
if base == 1:
show1 = f'{1:>3d} * {1:>3d} = {1:> 3d}\n {2:>3d} * {1:>3d} = {2:> 3d}\n {3:>3d} * {1:>3d} = {3:> 3d}\n {4:>3d} * {1:>3d} = {4:> 3d}\n'
return show1
else:
return ("\n"+"-"*13+"\n").join([f'{i+1:>2d} * {j:>2d} = {(i+1)*base:>3d}' for i in range(10)])
def test():
showquestion = "What is 9 X 9 ? \n 1. 81 \n 2. 12 \n 3. 22 \n 4. 68 "
return showquestion
sg.theme('LightBLue')
sg.set_options(font=("Courier New", 12))
showrobot_column = [
[sg.Image('E:/img/Gif_robot.gif', size = (700, 700))],
[sg.Exit()]
]
showtest_column =[
[sg.Button('1', enable_events=True, size=(15, 10), key="-Button-")],
[sg.Button('2', enable_events=True, size=(15, 10), key="-Button-")],
[sg.Button('3', enable_events=True, size=(15, 10), key="-Button-")],
[sg.Button('4', enable_events=True, size=(15, 10), key="-Button-")],
]
list_values = [f'{i+1:>2d}' for i in range(10)]
show_Textbox_selectbox = [
[sg.Multiline(size=(15, 20), expand_y=True, key='-MULTILINE-')],
[sg.Listbox(values=list_values, enable_events=True, size=(15, 10), key="-LISTBOX-"),sg.Button('Test Yourselves',key="-Test-")],
]
layout = [
[sg.Column(showrobot_column),
sg.VSeparator(),
sg.Column(showtest_column,visible = False),
sg.Column(show_Textbox_selectbox),],
]
window = sg.Window("First Test", layout, finalize=True)
multiline = window['-MULTILINE-']
multiline.update(value=corecode(1))
listbox = window['-LISTBOX-']
listbox.update(set_to_index=0)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'Exit':
break
elif event == '-LISTBOX-':
base = int(values[event][0])
multiline.update(value=corecode(base))
elif event == '-Test-':
multiline.update(value =test())
window['-LISTBOX-'].Update(visible = False)
window['-Button-'].Update(visible = True)
window['-Test-'].Update(visible = False)
window.close()
关于可见问题图片:
enter image description here
我想做成这个图片应该有4个按钮用来select 1,2,3,4回答问题,但我不知道为什么没有出现:(
一些问题
from PySimpleGUI.PySimpleGUI import Exit
错误或者不需要,用sg.Exit()
或者sg.Button('Exit')
. 就可以了
- 一行的宽度太长,无法适应多行的宽度,因此换行到下一行。
- 在大多数情况下,
sg.Button
选项 enable_events
不是必需的。
- 每个元素(按钮)必须有一个唯一的键。具有相同选项
key='-Button-'
的按钮“1”、“2”、“3”和“4”是错误的。
- 设置选项
visible=False
将获取元素丢失其位置,因此 sg.pin
用于保留位置。
- 使用选项
expand_y=True
可在垂直方向填充 space,请记住在必要时展开其容器,否则不再 space 展开。
- 选项
expand_x
和expand_y
在元素设置为不可见后会丢失,因此需要在元素设置为可见时调用方法expand
恢复。
- 也许是别的。
import PySimpleGUI as sg
def corecode(base):
j = 4 if base == 1 else 10
return ("\n"+"-"*13+"\n").join([f'{i+1:>2d} * {base:>2d} = {(i+1)*base:>3d}' for i in range(j)])
def test():
question = ["What is 9 X 9 ?", " 1. 81", " 2. 12", " 3. 22", " 4. 68"]
return '\n'.join(question)
sg.theme('LightBLue')
sg.set_options(font=("Courier New", 12))
showrobot_column = [
[sg.Image('E:/img/Gif_robot.gif', size = (700, 700))],
[sg.Exit()]
]
showtest_column =[[sg.Button(str(i+1), size=(15, 1), expand_y=True)] for i in range(4)]
list_values = [f'{i+1:>2d}' for i in range(10)]
show_Textbox_selectbox = [
[sg.Multiline(size=(20, 20), expand_y=True, key='-MULTILINE-')],
[sg.pin(sg.Listbox(values=list_values, enable_events=True, size=(15, 10), key="-LISTBOX-")),
sg.pin(sg.Button('Test Yourselves', key="-Test-"))],
]
layout = [
[sg.Column(showrobot_column, expand_y=True),
sg.VSeparator(),
sg.pin(sg.Column(showtest_column, visible=False, expand_y=True,key='-Buttons-'), expand_y=True),
sg.Column(show_Textbox_selectbox, expand_y=True),],
]
window = sg.Window("First Test", layout, finalize=True)
multiline = window['-MULTILINE-']
multiline.update(value=corecode(1))
listbox = window['-LISTBOX-']
listbox.update(set_to_index=0)
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, event == 'Exit'):
break
elif event == '-LISTBOX-':
base = int(values[event][0])
multiline.update(value=corecode(base))
elif event == '-Test-':
multiline.update(value=test())
window['-LISTBOX-'].Update(visible = False)
window['-Buttons-'].Update(visible = True)
window['-Buttons-'].expand(expand_y=True)
window['-Test-'].Update(visible = False)
elif event in (str(i+1) for i in range(4)):
print(f"Selection is {event}")
window.close()
我想要这样显示值This is what I want when I select 10 in listbox, but It show like this when I trying Now what its look like我找不到使用 f-string 设置它格式的方法,我还添加了一个名为“测试你自己”的按钮,在我按下它之后将使列表框(可见=假)但我不知道为什么我可以使按钮(可见=真)任何人都可以告诉我我在哪里编码错误吗?
from tkinter.constants import CHAR
import PySimpleGUI as sg
from PySimpleGUI.PySimpleGUI import Exit
def corecode(base):
if base == 1:
show1 = f'{1:>3d} * {1:>3d} = {1:> 3d}\n {2:>3d} * {1:>3d} = {2:> 3d}\n {3:>3d} * {1:>3d} = {3:> 3d}\n {4:>3d} * {1:>3d} = {4:> 3d}\n'
return show1
else:
return ("\n"+"-"*13+"\n").join([f'{i+1:>2d} * {j:>2d} = {(i+1)*base:>3d}' for i in range(10)])
def test():
showquestion = "What is 9 X 9 ? \n 1. 81 \n 2. 12 \n 3. 22 \n 4. 68 "
return showquestion
sg.theme('LightBLue')
sg.set_options(font=("Courier New", 12))
showrobot_column = [
[sg.Image('E:/img/Gif_robot.gif', size = (700, 700))],
[sg.Exit()]
]
showtest_column =[
[sg.Button('1', enable_events=True, size=(15, 10), key="-Button-")],
[sg.Button('2', enable_events=True, size=(15, 10), key="-Button-")],
[sg.Button('3', enable_events=True, size=(15, 10), key="-Button-")],
[sg.Button('4', enable_events=True, size=(15, 10), key="-Button-")],
]
list_values = [f'{i+1:>2d}' for i in range(10)]
show_Textbox_selectbox = [
[sg.Multiline(size=(15, 20), expand_y=True, key='-MULTILINE-')],
[sg.Listbox(values=list_values, enable_events=True, size=(15, 10), key="-LISTBOX-"),sg.Button('Test Yourselves',key="-Test-")],
]
layout = [
[sg.Column(showrobot_column),
sg.VSeparator(),
sg.Column(showtest_column,visible = False),
sg.Column(show_Textbox_selectbox),],
]
window = sg.Window("First Test", layout, finalize=True)
multiline = window['-MULTILINE-']
multiline.update(value=corecode(1))
listbox = window['-LISTBOX-']
listbox.update(set_to_index=0)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'Exit':
break
elif event == '-LISTBOX-':
base = int(values[event][0])
multiline.update(value=corecode(base))
elif event == '-Test-':
multiline.update(value =test())
window['-LISTBOX-'].Update(visible = False)
window['-Button-'].Update(visible = True)
window['-Test-'].Update(visible = False)
window.close()
关于可见问题图片: enter image description here 我想做成这个图片应该有4个按钮用来select 1,2,3,4回答问题,但我不知道为什么没有出现:(
一些问题
from PySimpleGUI.PySimpleGUI import Exit
错误或者不需要,用sg.Exit()
或者sg.Button('Exit')
. 就可以了
- 一行的宽度太长,无法适应多行的宽度,因此换行到下一行。
- 在大多数情况下,
sg.Button
选项enable_events
不是必需的。 - 每个元素(按钮)必须有一个唯一的键。具有相同选项
key='-Button-'
的按钮“1”、“2”、“3”和“4”是错误的。 - 设置选项
visible=False
将获取元素丢失其位置,因此sg.pin
用于保留位置。 - 使用选项
expand_y=True
可在垂直方向填充 space,请记住在必要时展开其容器,否则不再 space 展开。 - 选项
expand_x
和expand_y
在元素设置为不可见后会丢失,因此需要在元素设置为可见时调用方法expand
恢复。 - 也许是别的。
import PySimpleGUI as sg
def corecode(base):
j = 4 if base == 1 else 10
return ("\n"+"-"*13+"\n").join([f'{i+1:>2d} * {base:>2d} = {(i+1)*base:>3d}' for i in range(j)])
def test():
question = ["What is 9 X 9 ?", " 1. 81", " 2. 12", " 3. 22", " 4. 68"]
return '\n'.join(question)
sg.theme('LightBLue')
sg.set_options(font=("Courier New", 12))
showrobot_column = [
[sg.Image('E:/img/Gif_robot.gif', size = (700, 700))],
[sg.Exit()]
]
showtest_column =[[sg.Button(str(i+1), size=(15, 1), expand_y=True)] for i in range(4)]
list_values = [f'{i+1:>2d}' for i in range(10)]
show_Textbox_selectbox = [
[sg.Multiline(size=(20, 20), expand_y=True, key='-MULTILINE-')],
[sg.pin(sg.Listbox(values=list_values, enable_events=True, size=(15, 10), key="-LISTBOX-")),
sg.pin(sg.Button('Test Yourselves', key="-Test-"))],
]
layout = [
[sg.Column(showrobot_column, expand_y=True),
sg.VSeparator(),
sg.pin(sg.Column(showtest_column, visible=False, expand_y=True,key='-Buttons-'), expand_y=True),
sg.Column(show_Textbox_selectbox, expand_y=True),],
]
window = sg.Window("First Test", layout, finalize=True)
multiline = window['-MULTILINE-']
multiline.update(value=corecode(1))
listbox = window['-LISTBOX-']
listbox.update(set_to_index=0)
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, event == 'Exit'):
break
elif event == '-LISTBOX-':
base = int(values[event][0])
multiline.update(value=corecode(base))
elif event == '-Test-':
multiline.update(value=test())
window['-LISTBOX-'].Update(visible = False)
window['-Buttons-'].Update(visible = True)
window['-Buttons-'].expand(expand_y=True)
window['-Test-'].Update(visible = False)
elif event in (str(i+1) for i in range(4)):
print(f"Selection is {event}")
window.close()