【Python】图形用户界面设计

1、设计并编写一个窗口程序,该窗口只有一个按钮,当用户单击时可在后台输出hello

world.

import tkinter as tk
def on_button_click():print("hello world")
# 创建主窗口
root = tk.Tk()
root.title("Hello World Button")
# 设置窗口大小
root.geometry("200x100")
# 创建一个按钮
button = tk.Button(root, text="点击", command=on_button_click)
# 将按钮添加到主窗口
button.pack(pady=20)
# 启动主事件循环
root.mainloop()

2、设计并编写一个窗口程序,该窗口中的第一,第二行都是一个文本框,用于输人账号和密码,第三行是一个“提交"按钮。要求:密码框输人时不显示明文(设置wxTEPASSWORD属性),当用户单击提交时检测账号和密码是否都是admin,如果正确则在后台输出登录成功,否则输出登录失败。

这个要安装wxpython

pip install wxPython

或者在 wxPython · PyPI中下载对应版本的,放入Scripts中,再

python -m pip install wxPython-4.2.1-cp38-cp38-win_amd64.whl#下载的文件名
import wx
class LoginDialog(wx.Dialog):def __init__(self, parent, title):super(LoginDialog, self).__init__(parent, title=title, size=(300, 150))# 创建账号和密码的文本框self.username_ctrl = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)self.password_ctrl = wx.TextCtrl(self, style=wx.TE_PASSWORD | wx.TE_PROCESS_ENTER)# 创建提交按钮self.submit_btn = wx.Button(self, label="提交")self.submit_btn.Bind(wx.EVT_BUTTON, self.on_submit)# 布局sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(wx.StaticText(self, label="账号:"), 0, wx.ALIGN_CENTER | wx.ALL, 5)sizer.Add(self.username_ctrl, 0, wx.EXPAND | wx.ALL, 5)sizer.Add(wx.StaticText(self, label="密码:"), 0, wx.ALIGN_CENTER | wx.ALL, 5)sizer.Add(self.password_ctrl, 0, wx.EXPAND | wx.ALL, 5)sizer.Add(self.submit_btn, 0, wx.ALIGN_CENTER | wx.ALL, 5)self.SetSizerAndFit(sizer)def on_submit(self, event):username = self.username_ctrl.GetValue()password = self.password_ctrl.GetValue()if username == "admin" and password == "admin":print("登录成功")else:print("登录失败")# 应用程序的主类class MyApp(wx.App):def OnInit(self):dialog = LoginDialog(None, title="登录窗口")dialog.ShowModal()dialog.Destroy()return True# 运行应用程序if __name__ == '__main__':app = MyApp(0)app.MainLoop()

3.使用wx.html2或其他网页控件设计并编写一个基本浏览器。功能包括后退、前进、刷新、网址输人框、网页显示。

import wx  
import wx.html2 as webview  class BrowserFrame(wx.Frame):  def __init__(self, title):  super().__init__(None, title=title, size=(800, 600))  # 创建面板和布局  panel = wx.Panel(self)  sizer = wx.BoxSizer(wx.VERTICAL)  # 创建网址输入框  self.url_ctrl = wx.TextCtrl(panel, style=wx.TE_PROCESS_ENTER)  sizer.Add(self.url_ctrl, 0, wx.EXPAND | wx.ALL, 5)  # 创建WebView控件  self.browser = webview.WebView.New(panel)  sizer.Add(self.browser, 1, wx.EXPAND | wx.ALL, 5)  # 创建工具栏按钮  toolbar = self.CreateToolBar()  back_btn = toolbar.AddTool(wx.ID_BACKWARD, 'Back', wx.Bitmap('back.png'))  # 你需要提供'back.png'图片  forward_btn = toolbar.AddTool(wx.ID_FORWARD, 'Forward', wx.Bitmap('forward.png'))  # 你需要提供'forward.png'图片  refresh_btn = toolbar.AddTool(wx.ID_REFRESH, 'Refresh', wx.Bitmap('refresh.png'))  # 你需要提供'refresh.png'图片  toolbar.Realize()  # 绑定按钮事件  self.Bind(wx.EVT_TOOL, self.OnBackward, id=wx.ID_BACKWARD)  self.Bind(wx.EVT_TOOL, self.OnForward, id=wx.ID_FORWARD)  self.Bind(wx.EVT_TOOL, self.OnRefresh, id=wx.ID_REFRESH)  self.Bind(wx.EVT_TEXT_ENTER, self.OnURLEnter, self.url_ctrl)  # 设置面板布局  panel.SetSizer(sizer)  # 加载初始页面(可选)  self.LoadPage('http://www.example.com')  def LoadPage(self, url):  self.browser.LoadURL(url)  def OnBackward(self, event):  if self.browser.CanGoBack():  self.browser.GoBack()  def OnForward(self, event):  if self.browser.CanGoForward():  self.browser.GoForward()  def OnRefresh(self, event):  self.browser.Reload()  def OnURLEnter(self, event):  url = self.url_ctrl.GetValue()  self.LoadPage(url)  if __name__ == '__main__':  app = wx.App(False)  frame = BrowserFrame('Simple Browser')  frame.Show()  app.MainLoop()

 

4、使用 StyledTextCtr|控件编写一个Python编辑器,功能包括打开、保存、Python 代码颜色渲染(wxPython Demo 中的 advanced Generic Widgets 里的 RulerCtrl中有)。


import wx
import wx.stc as stc
import osclass PythonEditorFrame(wx.Frame):def __init__(self, parent=None, title='Python Editor'):super(PythonEditorFrame, self).__init__(parent, title=title, size=(800, 600))# 创建StyledTextCtrlself.text_ctrl = stc.StyledTextCtrl(self, style=wx.TE_MULTILINE)# 设置lexerself.text_ctrl.SetLexer(stc.STC_LEX_NULL)# 设置样式self.text_ctrl.StyleSetSpec(stc.STC_STYLE_DEFAULT, "fore:#000000,back:#FFFFFF,face:Courier New,size:10")self.text_ctrl.StyleSetSpec(1, "fore:#FF0000")  # 假设1是关键字的样式ID# 'def'和'class'关键字设置红色self.text_ctrl.SetText("def function():\n\tprint('Hello, World!')\n\nclass MyClass:\n\tpass")self.text_ctrl.StartStyling(0)self.text_ctrl.SetStyling(3, 1)  # 将'def'设置为红色(样式ID 1)self.text_ctrl.SetStyling(19, 1)  # 将'class'设置为红色(样式ID 1)# 创建一个简单的菜单(文件 -> 打开/保存)menubar = wx.MenuBar()fileMenu = wx.Menu()open_item = fileMenu.Append(wx.ID_OPEN, '&Open', 'Open a file')self.Bind(wx.EVT_MENU, self.OnOpen, open_item)save_item = fileMenu.Append(wx.ID_SAVE, '&Save', 'Save the file')self.Bind(wx.EVT_MENU, self.OnSave, save_item)menubar.Append(fileMenu, '&File')self.SetMenuBar(menubar)# 布局sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(self.text_ctrl, 1, wx.EXPAND | wx.ALL, 5)self.SetSizer(sizer)def OnOpen(self, event):"""打开文件对话框,并读取文件内容到StyledTextCtrl"""with wx.FileDialog(self, "Open Python file", "", "","Python files (*.py)|*.py", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:if fileDialog.ShowModal() == wx.ID_CANCEL:return  # 用户取消了操作# 读取文件内容pathname = fileDialog.GetPath()try:with open(pathname, 'r') as file:self.text_ctrl.SetText(file.read())except IOError:wx.LogError("Unable to open file '%s'" % pathname)def OnSave(self, event):"""保存StyledTextCtrl的内容到文件"""with wx.FileDialog(self, "Save Python file", "", "","Python files (*.py)|*.py", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog:if fileDialog.ShowModal() == wx.ID_CANCEL:return  # 用户取消了操作# 保存文件内容pathname = fileDialog.GetPath()try:with open(pathname, 'w') as file:file.write(self.text_ctrl.GetText())except IOError:wx.LogError("Unable to save file '%s'" % pathname)if __name__ == '__main__':app = wx.App(False)frame = PythonEditorFrame()frame.Show()app.MainLoop()

5、设计并编写一个简单的计算器程序,功能包括:0~9的数字按键、运算符“十”“-”“*”“/”、=(等号)与C清空按键,以及一个结果显示屏。 


import tkinter as tk# 创建一个简单的表达式求值函数
def evaluate_expression(expression):try:return str(eval(expression))except Exception as e:return "错误: " + str(e)# 创建一个计算器类class Calculator:def __init__(self, master):self.master = mastermaster.title("简单计算器")# 结果显示屏self.display = tk.Entry(master, font=('helvetica', 24), width=20, justify='right')self.display.grid(row=0, column=0, columnspan=4, pady=10)# 数字按键for row in range(1, 4):for col in range(4):num = str((row - 1) * 3 + col + 1)button = tk.Button(master, text=num, command=lambda num=num: self.append_to_display(num))button.grid(row=row, column=col, padx=10, pady=10)# 运算符按键ops = ['+', '-', '*', '/']for col, op in enumerate(ops, start=4):button = tk.Button(master, text=op, command=lambda op=op: self.append_to_display(op))button.grid(row=1, column=col, padx=10, pady=10)# 等号按键equal_button = tk.Button(master, text='=', command=self.calculate)equal_button.grid(row=4, column=3, padx=10, pady=10)# 清空按键clear_button = tk.Button(master, text='C', command=self.clear_display)clear_button.grid(row=4, column=2, padx=10, pady=10)def append_to_display(self, text):self.display.insert(tk.END, text)def clear_display(self):self.display.delete(0, tk.END)def calculate(self):try:expression = self.display.get()result = evaluate_expression(expression)self.display.delete(0, tk.END)self.display.insert(tk.END, result)except Exception as e:self.display.delete(0, tk.END)self.display.insert(tk.END, "错误: " + str(e))# 创建主窗口并运行计算器root = tk.Tk()
calc = Calculator(root)
root.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/328910.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android手动下载Gradle的使用方法

导入新项目通常会自动下载gradle版本,这种方式很慢而且经常下载失败,按照提示手动下载的gradle应该放在那里,如何使用,本篇文章为你提供一种亲测有效的方法: 在Android Studio打开Setting搜索Gradle找到Gradle的存放目…

每日一练 2024.5.16(补 2024.5.14)

题目&#xff1b; 我们定义 arr 是 山形数组 当且仅当它满足&#xff1a; arr.length > 3存在某个下标 i &#xff08;从 0 开始&#xff09; 满足 0 < i < arr.length - 1 且&#xff1a; arr[0] < arr[1] < ... < arr[i - 1] < arr[i]arr[i] > arr…

【大模型微调】一文掌握7种大模型微调的方法

本篇文章深入分析了大型模型微调的基本理念和多样化技术&#xff0c;细致介绍了LoRA、适配器调整(Adapter Tuning)、前缀调整(Prefix Tuning)等多个微调方法。详细讨论了每一种策略的基本原则、主要优点以及适宜应用场景&#xff0c;使得读者可以依据特定的应用要求和计算资源限…

Vue的学习 —— <vue组件>

目录 前言 正文 一、选项式API与组合式API 二、生命周期函数 1、onBeforeMount() 2、onMounted() 3、onBeforeUpdate() 4、onUpdated() 5、onBeforeUnmount() 6、onUnmounted() 三、组件之间的样式冲突 四、父组件向子组件传递数据 1、定义props 2、静态绑定props…

1709 ssm互联网消费信贷系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm互联网消费信贷系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源 代码和数据库&#xff0c;系统主要…

淘宝评论api接口的探索与实践

一、淘宝评论api接口简介 淘宝评论api接口是淘宝开放平台提供的一种数据接口&#xff0c;通过该接口&#xff0c;开发者可以获取淘宝商品的评论信息&#xff0c;包括评论内容、评论评分、评论时间等。此接口为开发者提供了丰富的评论数据&#xff0c;便于进行商品评价分析、营…

在 Django 中获取已渲染的 HTML 文本

在Django中&#xff0c;你可以通过多种方式获取已渲染的HTML文本。这通常取决于你希望在哪个阶段获取HTML文本。下面就是我在实际操作中遇到的问题&#xff0c;并且通过我日夜奋斗终于找到解决方案。 1、问题背景 在 Django 中&#xff0c;您可能需要将已渲染的 HTML 文本存储…

图文并茂:解析Spring Boot Controller返回图片的三种方式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 图文并茂&#xff1a;解析Spring Boot Controller返回图片的三种方式 前言使用Base64编码返回图片使用byte数组返回图片使用Resource对象返回图片图片格式转换与性能对比 前言 在互联网的世界里&…

C# 结合 JavaScript 对 Web 控件进行数据输入验证

目录 关于数据验证 范例运行环境 验证设计 JavaScript 方法 设计 实现 调用示例 C# 方法 设计 实现 调用示例 小结 关于数据验证 在 Web 应用的录入界面&#xff0c;数据验证是一项重要的实现功能&#xff0c;数据验证是指确认 Web 控件输入或选择的数据&#xff…

宁静致远(“静”)

宁静致远是一个成语&#xff0c;读音为nng jng zh yuǎn&#xff0c;意思是只有心境平稳沉着、专心致志&#xff0c;才能厚积薄发、 有所作为。出自《淮南子:主术训》。 出处 宁静致远张铭篆刻 此句最早出自西汉初年道家刘安的《淮南子:主术训》&#xff0c;蜀汉丞相诸葛亮的…

2025秋招Java还是c++?

一、我的编程经 说说我的编程经历&#xff0c;在C和Java之间我经历了几个阶段&#xff1a; 大学期间&#xff0c;我浅尝辄止地学习了一段时间的Java&#xff0c;但后来放弃了&#xff0c;开始学习C/C。本科毕业后&#xff0c;我选择攻读硕士学位&#xff0c;并一直专注于C的学…

美团小程序mtgsig1.2逆向

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

汇编--栈和寄存器

栈 栈是一种运算受限的线性表&#xff0c;其限定仅在表尾进行插入和删除操作的线性表&#xff0c;表尾也被叫做栈顶。简单概括就是我们对于元素的操作只能够在栈顶进行&#xff0c;也造就了其先进后出的结构特性。 栈 这种内存空间其实本质上有两种操作&#xff1a;将数据放入…

C语言如何删除表中指定位置的结点?

一、问题 如何删除链表中指定位置的结点&#xff1f; 二、解答 删除链表中指定的结点&#xff0c;就像是排好队的⼩朋友⼿牵着⼿&#xff0c;将其中⼀个⼩朋友从队伍中分出来&#xff0c;只需将这个⼩朋友的双⼿从两边松开。 删除结点有两种情况&#xff1a; &#xff08;1&am…

CRM与SCRM:联系与区别

引言 在当今数字化时代&#xff0c;企业与客户之间的互动变得日益频繁而复杂。为了更好地管理客户关系并提供更个性化的服务&#xff0c;许多企业采用了客户关系管理&#xff08;CRM&#xff09;系统。与此同时&#xff0c;随着社交媒体的普及和社交化互动的增加&#xff0c;社…

【文末附gpt升级方案】探讨当前时机是否适合进入AIGC行业(一)

随着科技的飞速发展&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;作为新兴的技术领域&#xff0c;正逐步走进公众的视野&#xff0c;并在多个行业展现出巨大的应用潜力。然而&#xff0c;对于创业者、投资者以及希望进入这一领域的专业人士来说&#xff0c;当前时…

传输层协议——TCP协议

目录 一、TCP协议 二、TCP协议格式 三、序号和确认序号 四、窗口大小 五、六个标记位 六、三次握手和四次挥手 七、滑动窗口 八、拥塞控制 九、延迟应答和捎带应答 1、延迟应答 2、捎带应答 十、面向字节流 十一、粘包问题 十二、TCP异常情况 十三、再谈listen函…

小程序|锁定查询功能如何使用?

学生或家长想要实现自己查询完成后&#xff0c;任何人都无法再次查询&#xff0c;老师应该如何设置&#xff1f;易查分的【锁定查询功能】就可实现&#xff0c;下面教大家如何使用吧。 &#x1f4cc;使用教程 &#x1f512;锁定查询功能介绍 ✅学生或家长自主锁定&#xff1a;开…

实现mysql的主从复制、实现MySQL的读写分离与负载均衡

实验环境 &#xff08;注明&#xff09;以下的所有关于yum和rpm以及tar的软件需要自己准备&#xff0c;没有的话可以私信博主 实验目标&#xff1a; 1.实现mysql主从复制 2.实现mysql读写分离与负载均衡 实验一、搭建mysql主从复制 1.建立时间同步环境&#xff0c;在主节…