<p>参考您的GUI,让我们为您的代码提供更多的结构,以便更清楚地看到正在发生的事情。
我将窗口的设置放在一个函数<code>my_window</code>中,将参数<code>app</code>从<code>main</code>传递给它。按下按钮<code>send</code>,<code>sender_text</code>、<code>receiver_text</code>和<code>message_text</code>的值通过使用<code>sender_text.get()</code>、<code>receiver_text.get()</code>等获得。。这些结果通过<code>lambda</code>函数传递给函数<code>send_message</code></p>
<pre><code>from tkinter import Tk, StringVar, Label, Entry, Button, W
def send_message(snd_txt, rcv_txt, msg_txt):
print(f'sent: {snd_txt}, {rcv_txt}, {msg_txt}')
def clear_text():
print('cleared')
def my_window(app):
# Sender
sender_text = StringVar()
sender_label = Label(app, text='Sender', font=('bold', 14), pady=20)
sender_label.grid(row=0, column=0, sticky=W)
sender_entry = Entry(app, textvariable=sender_text)
sender_entry.grid(row=0, column=1)
# Receiver
receiver_text = StringVar()
receiver_label = Label(app, text='Receiver', font=('bold', 14))
receiver_label.grid(row=0, column=2, sticky=W)
receiver_entry = Entry(app, textvariable=receiver_text)
receiver_entry.grid(row=0, column=3)
# Message
message_text = StringVar()
message_label = Label(app, text='Message', font=('bold', 14))
message_label.grid(row=1, column=0, sticky=W)
message_entry = Entry(app, textvariable=message_text)
message_entry.grid(row=1, column=1)
# Buttons
send_btn = Button(
app, text='Send', width=12,
command=lambda: send_message(sender_text.get(), receiver_text.get(), message_text.get()))
send_btn.grid(row=2, column=0, pady=20)
clear_btn = Button(app, text='Clear', width=12, command=clear_text)
clear_btn.grid(row=2, column=1)
def main():
app = Tk()
app.title('SMS')
app.geometry('430x145')
my_window(app)
app.mainloop()
if __name__ == '__main__':
main()
</code></pre>
<p>然而,更常见的是将<code>my_window</code>定义为<code>class</code>,并使该<code>clear_text</code>的函数<code>clear_text</code>和<code>send_message</code>方法具有更大的灵活性</p>
<pre><code>from tkinter import Tk, StringVar, Label, Entry, Button, W
class my_window:
def __init__(self, app):
# Sender
self.sender_text = StringVar()
sender_label = Label(app, text='Sender', font=('bold', 14), pady=20)
sender_label.grid(row=0, column=0, sticky=W)
sender_entry = Entry(app, textvariable=self.sender_text)
sender_entry.grid(row=0, column=1)
# Receiver
self.receiver_text = StringVar()
receiver_label = Label(app, text='Receiver', font=('bold', 14))
receiver_label.grid(row=0, column=2, sticky=W)
receiver_entry = Entry(app, textvariable=self.receiver_text)
receiver_entry.grid(row=0, column=3)
# Message
self.message_text = StringVar()
message_label = Label(app, text='Message', font=('bold', 14))
message_label.grid(row=1, column=0, sticky=W)
message_entry = Entry(app, textvariable=self.message_text)
message_entry.grid(row=1, column=1)
# Buttons
send_btn = Button(app, text='Send', width=12, command=self.send_message)
send_btn.grid(row=2, column=0, pady=20)
clear_btn = Button(app, text='Clear', width=12, command=self.clear_text)
clear_btn.grid(row=2, column=1)
def send_message(self):
print(f'sent: {self.sender_text.get()}, '
f'{self.receiver_text.get()}, '
f'{self.message_text.get()}')
def clear_text(self):
self.sender_text.set('')
self.receiver_text.set('')
self.message_text.set('')
print('cleared')
def main():
app = Tk()
app.title('SMS')
app.geometry('430x145')
my_window(app)
app.mainloop()
if __name__ == '__main__':
main()
</code></pre>