Pygubu-Designer 使用指南

news2024/12/21 11:44:59

Pygubu-Designer 使用指南

一、简介

Pygubu-Designer 是一个用于创建 Tkinter GUI 界面的可视化设计工具,让 Python 开发者能够通过拖拽方式设计界面,大大提高开发效率。

二、安装配置

1. 安装

# 使用 pip 安装
pip install pygubu-designer

# 或者使用 pip3
pip3 install pygubu-designer

2. 启动与配置

# 命令行启动
pygubu-designer

基础配置步骤:

  1. 打开 Edit -> Preferences
  2. 设置 Python 解释器路径
  3. 选择界面主题
  4. 配置项目默认保存路径

三、基础示例

示例1:创建简单窗口

import tkinter as tk
import pygubu

class SimpleWindow:
    def __init__(self):
        self.builder = pygubu.Builder()
        
        # 加载ui文件
        self.builder.add_from_file('simple_window.ui')
        
        # 获取主窗口
        self.mainwindow = self.builder.get_object('main_window')
        
        # 连接回调函数
        self.builder.connect_callbacks(self)
    
    def run(self):
        self.mainwindow.mainloop()

if __name__ == '__main__':
    app = SimpleWindow()
    app.run()

示例2:计算器界面

import tkinter as tk
import pygubu

class Calculator:
    def __init__(self):
        self.builder = pygubu.Builder()
        self.builder.add_from_file('calculator.ui')
        self.mainwindow = self.builder.get_object('calculator_window')
        
        # 获取输入框和按钮
        self.display = self.builder.get_object('display_entry')
        self.builder.connect_callbacks(self)
    
    def button_click(self):
        # 按钮点击回调
        number = self.builder.get_variable('number').get()
        current = self.display.get()
        self.display.delete(0, tk.END)
        self.display.insert(0, current + number)

    def run(self):
        self.mainwindow.mainloop()

示例3:登录界面

import tkinter as tk
import pygubu
from tkinter import messagebox

class LoginWindow:
    def __init__(self):
        self.builder = pygubu.Builder()
        self.builder.add_from_file('login.ui')
        self.mainwindow = self.builder.get_object('login_window')
        
        # 获取用户名和密码输入框
        self.username_entry = self.builder.get_object('username_entry')
        self.password_entry = self.builder.get_object('password_entry')
        
        # 连接回调
        self.builder.connect_callbacks(self)
    
    def login(self):
        username = self.username_entry.get()
        password = self.password_entry.get()
        
        # 简单的验证逻辑
        if username == "admin" and password == "123456":
            messagebox.showinfo("成功", "登录成功!")
        else:
            messagebox.showerror("错误", "用户名或密码错误!")
    
    def clear_fields(self):
        self.username_entry.delete(0, tk.END)
        self.password_entry.delete(0, tk.END)
    
    def run(self):
        self.mainwindow.mainloop()

if __name__ == '__main__':
    app = LoginWindow()
    app.run()

四、登录界面UI文件示例

<?xml version='1.0' encoding='utf-8'?>
<interface version="1.2">
  <object class="tk.Toplevel" id="login_window">
    <property name="title">登录</property>
    <child>
      <object class="ttk.Frame" id="main_frame">
        <property name="padding">20</property>
        <layout manager="pack">
          <property name="expand">true</property>
          <property name="fill">both</property>
        </layout>
        <child>
          <object class="ttk.Label" id="username_label">
            <property name="text">用户名:</property>
            <layout manager="grid">
              <property name="column">0</property>
              <property name="row">0</property>
              <property name="padx">5</property>
              <property name="pady">5</property>
            </layout>
          </object>
        </child>
        <child>
          <object class="ttk.Entry" id="username_entry">
            <layout manager="grid">
              <property name="column">1</property>
              <property name="row">0</property>
              <property name="padx">5</property>
              <property name="pady">5</property>
            </layout>
          </object>
        </child>
        <child>
          <object class="ttk.Label" id="password_label">
            <property name="text">密码:</property>
            <layout manager="grid">
              <property name="column">0</property>
              <property name="row">1</property>
              <property name="padx">5</property>
              <property name="pady">5</property>
            </layout>
          </object>
        </child>
        <child>
          <object class="ttk.Entry" id="password_entry">
            <property name="show">*</property>
            <layout manager="grid">
              <property name="column">1</property>
              <property name="row">1</property>
              <property name="padx">5</property>
              <property name="pady">5</property>
            </layout>
          </object>
        </child>
        <child>
          <object class="ttk.Button" id="login_button">
            <property name="text">登录</property>
            <property name="command">login</property>
            <layout manager="grid">
              <property name="column">0</property>
              <property name="row">2</property>
              <property name="columnspan">2</property>
              <property name="pady">10</property>
            </layout>
          </object>
        </child>
      </object>
    </child>
  </object>
</interface>

五、注意事项

  1. 确保系统已安装 tkinter:
python -m tkinter
  1. 常见问题解决:
  • 如果遇到依赖问题,可以安装完整版:
pip install pygubu[all]
  • UI 文件路径要正确设置
  • 回调函数名称要与 UI 文件中的设置一致
  1. 开发建议:
  • 使用相对路径加载 UI 文件
  • 做好异常处理
  • 注意界面布局的美观性
  • 合理组织代码结构

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

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

相关文章

SmartX分享:NVMe-oF 介绍、SMTX ZBS 如何选择高性能场景解决方案与如何实现

目录 背景什么是 NVMe-oFZBS AccessiSCSI 与 iSERNMVe-oF 介绍NVMeNVMe-oFNVMe-oF 承载网络&#xff08;数据平面&#xff09; ZBS NVMe-oF 实现ZBS 接入策略ZBS 接入点分配策略性能测试 为什么要支持 RoCE引用 背景 前几篇文章&#xff0c;我们认识到了 SmartX 公司产品 SMTX…

数据可视化-1. 折线图

目录 1. 折线图适用场景分析 1. 1 时间序列数据展示 1.2 趋势分析 1.3 多变量比较 1.4 数据异常检测 1.5 简洁易读的数据可视化 1.6 特定领域的应用 2. 折线图局限性 3. 折线图代码实现 3.1 Python 源代码 3.2 折线图效果&#xff08;网页显示&#xff09; 1. 折线图…

python网络框架——Django、Tornado、Flask和Twisted

Django、Tornado和flask是全栈网络框架&#xff0c;而Twisted更专注于网络底层的高性能封装&#xff0c;不提供HTML模版引擎等界面功能&#xff0c;因此不能称为全栈框架。 1、Django 发布于2003年&#xff0c;是当前python世界里最负盛名且最成熟的网络框架。相较于其他web框…

Flash语音芯片相比OTP语音芯片的优势

Flash语音芯片和OTP语音芯片是两种常见的语音解决方案&#xff0c;在各自的应用领域中发挥着重要作用。本文‌将介绍Flash语音芯片相比OTP(One-Time Programmable)语音芯片的显著优势‌。 1‌.可重复擦写‌&#xff1a;Flash语音芯片的最大特点是支持多次编程和擦除&#xff0c…

门店全域推广,线下商家营销布局的增量新高地

门店是商业中最古老的经营业态之一。很早就有行商坐贾的说法&#xff0c;坐贾指的就是门店商家&#xff0c;与经常做商品流通的「行商」相对应。 现在的门店经营&#xff0c;早已不是坐等客来&#xff0c;依靠自然流量吸引顾客上门&#xff0c;大部分的门店经营与推广都已经开…

NX系列-使用 `nmcli` 命令创建 Wi-Fi 热点并设置固定 IP 地址

使用 nmcli 命令创建 Wi-Fi 热点并设置固定 IP 地址 一、前言 在一些场景下&#xff0c;我们需要将计算机或嵌入式设备&#xff08;例如 NVIDIA Orin NX&#xff09;转换为 Wi-Fi 热点&#xff0c;以便其他设备&#xff08;如手机、笔记本等&#xff09;能够连接并使用该设备…

[react] <NavLink>自带激活属性

NavLink v6.28.0 | React Router 点谁谁就带上类名 当然类名也是可以自定义 <NavLinkto{item.link}className{({ isActive }) > (isActive ? 测试 : )}>{item.title}</NavLink> 有什么用?他会监听你的路由,刷新的话也会带上激活效果

【LC】100. 相同的树

题目描述&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&…

代码随想录day24 | leetcode 93.复原IP地址 90.子集 90.子集II

93.复原IP地址 Java class Solution {List<String> result new ArrayList<String>();StringBuilder stringBuilder new StringBuilder();public List<String> restoreIpAddresses(String s) {backtracking(s, 0, 0);return result;}// number表示stringb…

Hive是什么,Hive介绍

官方网站&#xff1a;Apache Hive Hive是一个基于Hadoop的数据仓库工具&#xff0c;主要用于处理和查询存储在HDSF上的大规模数据‌。Hive通过将结构化的数据文件映射为数据库表&#xff0c;并提供类SQL的查询功能&#xff0c;使得用户可以使用SQL语句来执行复杂的​MapReduce任…

AI智能决策赋能服装零售 实现精准商品计划与供需平衡

在服装这个典型的散对散供需模型中&#xff0c;库存问题一直是零售商面临的重大挑战。如何精准预测市场需求&#xff0c;实现供需平衡&#xff0c;成为摆在零售商面前的一道难题。然而&#xff0c;随着智能决策系统的应用&#xff0c;这一切正在悄然改变。 在这个信息爆炸的时代…

RadiAnt DICOM - 基本主题 :从 PACS 服务器打开研究

正版序列号获取&#xff1a;https://r-g.io/42ZopE RadiAnt DICOM Viewer PACS 客户端功能允许您从 PACS 主机&#xff08;图片存档和通信系统&#xff09;搜索和下载研究。 在开始之前&#xff0c;您需要确保您的 PACS 服务器和 RadiAnt 已正确配置。有关配置说明&#xff0c…

VR虚拟展馆如何平衡用户隐私保护与数据收集?

在虚拟现实&#xff08;VR&#xff09;虚拟展馆的设计和运营中&#xff0c;用户隐私保护与数据收集之间的平衡是一个至关重要的议题。 接下来&#xff0c;由专业从事VR虚拟展馆制作的圆桌3D云展厅平台为大家介绍一些策略&#xff0c;可以帮助VR虚拟展馆在收集有用数据的同时&a…

46.全排列 python

全排列 题目题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a; 题解解决方案&#xff1a;回溯算法思路&#xff1a;Python 实现&#xff1a;复杂度分析&#xff1a; 提交结果 题目 题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回…

在Win11系统上安装Android Studio

诸神缄默不语-个人CSDN博文目录 下载地址&#xff1a;https://developer.android.google.cn/studio?hlzh-cn 官方安装教程&#xff1a;https://developer.android.google.cn/studio/install?hlzh-cn 点击Next&#xff0c;默认会同时安装Android Studio和Android虚拟机&#…

基于字节大模型的论文翻译(含免费源码)

基于字节大模型的论文翻译 源代码&#xff1a; &#x1f44f; star ✨ https://github.com/boots-coder/LLM-application 展示 项目简介 本项目是一个基于大语言模型&#xff08;Large Language Model, LLM&#xff09;的论文阅读与翻译辅助工具。它通过用户界面&#xff08…

密钥.id文件连接SSH

不用设置密码&#xff0c;直接连接

run postinstall error, please remove node_modules before retry!

下载 node_modules 报错&#xff1a;run postinstall error, please remove node_modules before retry! 原因&#xff1a;node 版本出现错误&#xff0c;我的项目之前是在 12 下运行的。解决方法&#xff1a; 先卸载node_modules清除缓存将node版本切换到12重新下载即可

【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?

要在 Windows 上编译 etcd 及 etcdctl 工具&#xff0c;并使用 bat 脚本启动 etcd 集群&#xff0c;首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤&#xff1a; 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…

双指针---和为s的两个数字

这里写自定义目录标题 题目链接问题分析代码解决执行用时 题目链接 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 问题分析 暴⼒解法&#xff0c;会超时 &#xff08;两层…