使用wxPython库做一个定时发送消息的脚本
时间: 2024-06-09 08:05:30 浏览: 182
好的,我们可以使用wxPython库编写一个GUI界面,然后使用Python的time库实现定时发送消息的功能。
首先,我们需要安装wxPython库:
```
pip install wxPython
```
然后,我们来编写代码:
```python
import wx
import time
import threading
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, -1, "定时发送消息", size=(300, 200))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
hbox3 = wx.BoxSizer(wx.HORIZONTAL)
self.label1 = wx.StaticText(panel, label="定时发送消息", style=wx.ALIGN_CENTER)
hbox1.Add(self.label1, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
self.label2 = wx.StaticText(panel, label="发送内容:")
hbox2.Add(self.label2, 1, wx.EXPAND | wx.ALIGN_LEFT | wx.ALL, 10)
self.text_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE)
hbox2.Add(self.text_ctrl, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
self.label3 = wx.StaticText(panel, label="间隔时间(秒):")
hbox3.Add(self.label3, 1, wx.EXPAND | wx.ALIGN_LEFT | wx.ALL, 10)
self.spin_ctrl = wx.SpinCtrl(panel, value='5', min=1, max=3600)
hbox3.Add(self.spin_ctrl, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
self.start_button = wx.Button(panel, label="开始发送")
self.start_button.Bind(wx.EVT_BUTTON, self.on_start)
self.stop_button = wx.Button(panel, label="停止发送", style=wx.BU_LEFT)
self.stop_button.Disable()
self.stop_button.Bind(wx.EVT_BUTTON, self.on_stop)
hbox4 = wx.BoxSizer(wx.HORIZONTAL)
hbox4.Add(self.start_button, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
hbox4.Add(self.stop_button, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
vbox.Add(hbox1, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
vbox.Add(hbox2, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
vbox.Add(hbox3, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
vbox.Add(hbox4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
panel.SetSizer(vbox)
self.timer = None
self.thread = None
def on_start(self, event):
self.start_button.Disable()
self.stop_button.Enable()
interval = self.spin_ctrl.GetValue()
message = self.text_ctrl.GetValue()
self.timer = wx.Timer(self)
self.timer.Start(interval*1000)
self.Bind(wx.EVT_TIMER, self.send_message, self.timer)
self.thread = threading.Thread(target=self.send_message, args=(message, interval))
self.thread.start()
def on_stop(self, event):
self.start_button.Enable()
self.stop_button.Disable()
self.timer.Stop()
self.thread.join()
def send_message(self, message, interval):
while True:
wx.CallAfter(self.show_message, message)
time.sleep(interval)
def show_message(self, message):
dial = wx.MessageDialog(None, message, "消息", wx.OK)
dial.ShowModal()
dial.Destroy()
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()
```
这段代码定义了一个`MyFrame`类,它继承自`wx.Frame`类,并在初始化方法中创建了一个GUI界面,包括一个文本框用来输入消息内容、一个下拉框用来选择发送间隔、一个“开始发送”按钮和一个“停止发送”按钮。
当用户点击“开始发送”按钮时,程序会启动一个新的线程,在这个线程中不断发送消息,并使用`wx.CallAfter`方法在主线程中显示消息框。
当用户点击“停止发送”按钮时,程序会停止发送消息的线程,并关闭定时器。
现在我们可以运行这个程序,试着输入一些消息内容并选择一个发送间隔,然后点击“开始发送”按钮,程序就会开始定时发送消息。当你想停止发送时,点击“停止发送”按钮即可。
阅读全文