【Python】图形用户界面设计

news2024/12/24 9:25:39

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 os


class PythonEditorFrame(wx.Frame):
    def __init__(self, parent=None, title='Python Editor'):
        super(PythonEditorFrame, self).__init__(parent, title=title, size=(800, 600))


        # 创建StyledTextCtrl
        self.text_ctrl = stc.StyledTextCtrl(self, style=wx.TE_MULTILINE)
        # 设置lexer
        self.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 = master
        master.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.coloradmin.cn/o/1680788.html

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

相关文章

2005-2022年全国及各省绿色信贷水平测算数据(含原始数据+计算过程+计算结果)

2005-2022年全国及各省绿色信贷水平测算数据(含原始数据计算过程计算结果) 1、时间:2005-2022年 2、来源:工业统计年鉴、统计年鉴、其中2017年采用插值法填补 3、范围:31省 4、方法说明:选取各省六大高…

每日一题13:Pandas:方法链

一、每日一题 ;:: 解答: import pandas as pddef findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:heavy_animals animals[animals[weight] > 100].sort_values(byweight, ascendingFalse)result heavy_anim…

代码随想录--链表--反转链表

题目 题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。 其实只需要改变链表的next指针的…

Java项目:基于ssm框架实现的家政服务网站管理系统分前后台(B/S架构+源码+数据库+毕业论文+答辩PPT)

一、项目简介 本项目是一套基于ssm框架实现的家政服务网站管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 二、技术实现 jdk版本:1.…

Qt+C++串口调试工具

程序示例精选 QtC串口调试工具 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《QtC串口调试工具》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。 …

JWT生成token工具类实现

JWT简介 JWT定义 JWT全称为Json web token,也就是 Json 格式的 web token JWT数据结构 1.JWT由三段字符串组成,中间用.分隔 Project_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiZXhwIjoxNzE2MzcwMTM0LCJpYXQiOjE3MTU3NjUzMzQsImp0aSI6IjllO…

关于DOCKER启动后如何添加新的端口映射

前段时间在用docker部署服务的时候发现,容器已经启动,但是需要新的端口映射(即容器在启动的时候只进行了部分的端口映射),经过查询资料后发现现在网上有2种方法,一中是修改json文件。另一种是将已经运行的容…

QT:QML中读取文件(QDesktopServices和QFile)

目录 一.介绍 二.QDesktopServices: 1.添加头文件 2.声明函数 3.操作 4.注册 5.qml调用 三.QFile: 1.添加头文件 2.声明函数 3.读取指定文件名的文件内容 4.注册 5.qml中调用 四.效果展示: 1.QDesktopServices:上方按钮点击打开…

纯血鸿蒙APP实战开发——Web获取相机拍照图片案例

介绍 本示例介绍如何在HTML页面中拉起原生相机进行拍照,并获取返回的图片。 效果预览图 使用说明 点击HTML页面中的选择文件按钮,拉起原生相机进行拍照。完成拍照后,将图片在HTML的img标签中显示。 实现思路 添加Web组件,设置…

一看就会的AOP事务

文章目录 AOPAOP简介AOP简介和作用AOP的应用场景为什么要学习AOP AOP入门案例思路分析代码实现AOP中的核心概念 AOP工作流程AOP工作流程AOP核心概念在测试类中验证代理对象 AOP切入点表达式语法格式通配符书写技巧 AOP通知类型AOP通知分类AOP通知详解 AOP案例案例-测量业务层接…

太极图形学——高级数据结构——稠密

太极是一个面向数据的编程语言 在并行计算的框架下,在计算上花费的时间反而是少数,大量的时间都花在了数据获取(也就是访问内存)上面,这一点在之前的games103课程上也有简单的提及 cpu的计算能力非常强大&#xff0c…

Qwen学习笔记3:Qwen模型调用外部API实现模型增强(openai的形式)

前言 本文记录了使用本地部署的Qwen模型,调用外部API实现模型的功能增强,非常的易用,大家用于开发自己的应用,只需要作简单的修改就可以进行使用了。 本文的代码来源视频教程: Qwen大模型变强了,通过API…

【SQL】SQL常见面试题总结(2)

目录 1、增删改操作1.1、插入记录(一)1.2、插入记录(二)1.3、插入记录(三)1.4、更新记录(一)1.5、更新记录(二)1.6、删除记录(一)1.7、…

【文末附gpt升级方案】腾讯混元文生图大模型开源:中文原生Sora同款DiT架构引领新潮流

在人工智能与计算机视觉技术迅猛发展的今天,腾讯再次引领行业潮流,宣布其旗下的混元文生图大模型全面升级并对外开源。这次开源的模型不仅具备强大的文生图能力,更采用了业内首个中文原生的Sora同款DiT架构,为中文世界的视觉生成领…

NodeJS V8引擎内存和垃圾回收器

关于max_old_space_size max_old_space_size参数用于指定V8引擎的老生代内存的最大大小。通过增加max_old_space_size参数的值,我们可以提供更多的内存给V8引擎,从而提高应用程序的性能和稳定性。 既然提到了老生代,就不得不提下什么是垃圾&…

IDEA 每次启动都显示选择项目页面

IDEA版本:2021.3.3 打开 Settings > Appearance & Behavior > System Settings 取消勾选 Reopen projects on startup 然后下次启动 IDEA 会显示选择项目页面

论文阅读 - Anatomy of an AI-powered malicious social botnet

论文链接: https://arxiv.org/pdf/2307.16336.pdf 目录 摘要 1引言 2 相关工作 2.1 LLM驱动的网络威胁 2.2 LLM生成的内容检测 2.3 社交机器人检测 2.4 由 LLM 增强的机器人 3 Fox8僵尸网络的识别 4 特性 4.1 配置文件 4.2 社交网络 4.3内容类型 4.4放…

全新多语言海外抢单刷单系统源码 订单自动匹配 支持分组 代理后台

安装教程 测试环境:Nginx PHP7.0 MySQL5.6 config/database 修改数据库 设置运行目录public 伪静态thinkphp 后台登录地址:/admin 账号admin 密码admin123 前端出现报错 删除runtime文件夹得缓存文件即可 源码免费下载地址抄笔记 (chaobiji.cn)

数据结构——冒泡排序

懒猫老师-数据结构-(63)冒泡排序(起泡排序)_哔哩哔哩_bilibili 交换排序的一类 基本思想 两两比较相邻记录的关键码,如果反序则交换,直到没有反序的记录为止。 过程 有序区不断扩大,无序区不断减小

vllm docker部署qwen等大模型推理;api post调用访问

参考: https://docs.vllm.ai/en/latest/serving/deploying_with_docker.html https://hub.docker.com/r/vllm/vllm-openai https://blog.csdn.net/weixin_42357472/article/details/136165481 下载镜像: docker pull vllm/vllm-openai 镜像默认最后一层就是python -m vllm.…