【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.mzph.cn/bicheng/13382.shtml

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

相关文章

代码随想录-算法训练营day41【动态规划04:01背包问题-滚动数组、分割等和子集】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part04● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集 正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,…

SAP_SNOTE_补丁修复_全流程实战

SAP ABAP 顾问(开发工程师)能力模型-CSDN博客文章浏览阅读1.2k次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!https://blog.csdn.net/java_zhong1990/article/d…

文字游侠AI丨简直是写作神器,头条爆文一键生成稳定赚米!附渠道和详细教程(只需四步)!

在数字时代的浪潮中,人们不断寻求网络空间中的商机,期望在互联网的浩瀚海洋里捕捉到稳定的财富。随着人工智能技术的突飞猛进,越来越多的AI工具被融入到各行各业,开辟了新天地,带来了创新的盈利模式。 其中&#xff0c…

回收站删除的照片怎么恢复?7个实用方法为你找回照片!

“我刚刚在对电脑上的照片进行清理,不小心错删了一张还需要的照片,但是在使用回收站时,将它删除了,有什么恢复回收站照片的简单方法吗?” 照片是我们生活点滴的见证,无论是外出旅游还是日常琐碎&#xff0c…

对话YashanDB CTO陈志标:如何推动国产数据库长远发展

深圳计算科学研究院(以下简称“深算院”)是深圳市人民政府2018年11月批准建设的“十大基础研究机构”之一,由深圳市科技创新委员会主管、深圳大学举办、深圳市龙华区人民政府共建的二类事业法人单位。 崖山数据库系统YashanDB是深算院完全自主…

Originx的创新解法之:应用程序故障篇

Originx并不期望做一个完整覆盖全栈的监控体系,而是利用北极星指标体系标准化找出故障方向,然后联动各种成熟的监控数据形成证据链条,并将各种数据融合在一个故障报告之中。更多信息请参考 Log | Metrics | Trace的联动方式探讨http://mp.wei…

iPhone携手ChatGPT?苹果OpenAI或将强强联手

近年来,人工智能技术的蓬勃发展掀起了一场席卷全球的科技浪潮,而智能手机作为人们日常生活中不可或缺的一部分,自然成为了这场AI竞赛的重要战场。各大科技巨头纷纷加码布局,力图在AI领域占据领先地位。 近日,据知情人士…

智慧城市新篇章:城市街道治理视频系统建设的探索与实践

一、背景分析 随着城市化进程的加快和社会治安形势的日趋复杂,街道治安管理面临着前所未有的挑战。对于街道治安的管理,面临着街道上机动车、非机动车违停、游商摊贩、垃圾堆积、人员监管等问题,既影响市容市貌,又有安全隐患。传…

Springboot+Shiro实现登录

Shiro的简单介绍 Shiro是Java的一个安全框架,旨在简化身份验证和授权。Shiro在JavaSE和JavaEE项目中都可以使用。它主要用来处理身份认证,授权,企业会话管理和加密等。 shiro由三部分组成: 1、Subject:当前操作的用…

自定义类似vite的命令行

一、第一步 随便新建一个文件夹,终端执行npm init,生成如图的结构 其中name就是命令行的名字 二、第二步 新建一个js文件,在其顶部加入这串代码#!/usr/bin/env node,#!就是告诉系统这个是可执行脚本,/usr/bin/env就是系统环境变量&#x…

Spring-Cloud 微服务

1. 微服务架构 1.1 单体应用架构---内部项目【OA WMS等】 将项目所有模块(功能)打成jar或者war,然后部署一个进程 优点: 1:部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。 2:技术单一:项目不需要复杂的技术栈,往往一套熟悉的…

争议PCDN:限速、局停为哪般?

最近,在国内通信人聚集的有个话题特别火,那就是部分运营商给家庭宽带接入用户进行上行限速,甚至还会出现局停的极端现象,引起了不小争议。 “每个月按时交宽带费,运营商凭啥给我限速?”这是很多网友的疑问…

记PLSQL链接Oracle数据库

一、环境 Windows环境安装plsql工具 Oracle部署在服务器上面。 由于我之前在本地Windows安装了一个Oracle数据库,结果导致之前已经在连接的PLSQL链接不上。 二、操作 PLSQL工具正常安装,主要就是一些Oracle的一些配置,和oracle客户端。 o…

HashTable, HashMap, ConcurrentHashMap 三者区别

目录 1. HashMap 2. HashTable 3. ConcurrentHashMap 1. HashMap HashMap 是 Java 中非常常用的一个数据结构,它主要用于存储 键值对(K,V)。 在JDK 1.7中,HashMap的实现是基于 Table数组 和 Entry链表 的组合。 从…

在 pyGTK 中使用 visibility_notify 事件

问题背景 在 Windows 系统中开发 pygtk 应用程序时,需要知道何时一个窗口被另一个窗口遮挡或显示,以便停止繁重的绘图进程。为此,可以使用 visibility_notify_event 信号来获取窗口可见性状态的改变。 解决方案 可以使用 visibility_notif…

【Linux】缓冲区

目录 一、初识缓冲区 二、用户级缓冲区 三、内核级缓冲区 四、内核级缓冲区 VS 用户级缓冲区 五、用户级缓冲区在哪里? 一、初识缓冲区 缓冲区是什么?可以简单理解成一部分内存。例如用户缓冲区(char arr[])、C标准库提供的缓冲区、操作系统提供的缓…

【算法】网络图中的dfs

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、单词搜索二、黄金矿工三、不同路径 |||四、图像渲染五、岛屿数量六、岛屿的最大面积七、被围绕的区域…

三磷酸腺苷(ATP)制备方法众多 主要应用于生化研究以及医药领域

三磷酸腺苷(ATP)制备方法众多 主要应用于生化研究以及医药领域 三磷酸腺苷(ATP)又称腺嘌呤核苷三磷酸、腺苷三磷酸,化学式为C10H16N5O13P3,是一种高能磷酸化合物。腺苷三磷酸外观呈白色粉末,无特…

2025秋招Java还是c++?

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

集成了Gemini的Android Studio,如虎添翼

今天将Android Studio升级到最新版(Jellyfish)。发现在new features中有一条: Code suggestions with Gemini in Android Studio 打开路径为: View > Tool Windows > Gemini 支持多国语言,英文、中文都能正确理解…