Python Qt的窗体开发的基本操作_没有qtpythonqt窗口

首先看成品:

这个程序的功能是输入原价和降价的百分比,计算出最后的价格。

设计器部分

然后就是开发阶段了,首先在Qt Designer中建立一个窗体,大概像图片中的样子,然后将控件都拖进去

其中,“原价是多少啊”,“绿色的标标”这些文字类的控件是QLabel,第一个框框是QTextEdit,第二个标标是QDoubleSpinBox,或者使用QSpinBox都行,两者主要是数字类型的不同,

提交按钮是QPushButton,这里主要是想尝试一下不同的控件,接下来点击在图片框上的QLabel,然后在属性编辑器中将objectName命名为 labelResult ,QTextEdit命名为textPrice,QDoubleSpinBox

命名为dSBPer ,QPushButton命名为btnSub如图:

这样的命名方式并没有什么特殊含义,只不过能够让鄙人记得更牢一些,以防止程序打到一半来回的看设计器。

这里有个比较麻烦的东西 ------------ 图片框

图片显示本身是QLabel,所以显示图片需要先在设计器中放置一个QLbel控件,改控件在程序中没有改动,所以名字默认就好,接下来还需要在资源管理器中添加资源文件,如图:

在Qt设计器中,只需在QLabel控件的pixmap属性中载入即可,支持的文件可访问Qt的文档,我会在文章后面贴出

值得注意的是,资源文件在程序中的使用需要编译为.py文件

编译的代码如下:

pyrcc4 -o a1_rc.py a1.qrc

程序部分

现在就开始程序部分的编辑了

第一步先导入有关Qt的库

然后创建Window初始化

接下来是基础类的编写

其中"self.btnSub.clicked.connect(self.CalculateTax)"中,btnSub是按钮的名称,clicked.connect是按钮的点击事件要执行的函数的连接,CalculateTax是我自己写的点击的函数,他将会在按钮被点击后调用

这一行在主程序中,是程序执行时显示窗体的操作

接下来就开始写CalculateTax(self)函数了,它放在App类中:

被点击后调用

[外链图片转存中…(img-tjVDz5dP-1736660199829)]

这一行在主程序中,是程序执行时显示窗体的操作

接下来就开始写CalculateTax(self)函数了,它放在App类中:

<think>好的,我现在要详细解答用户关于Spring IOC容器创建过程的问题。首先,我需要回忆一下Spring框架的基本知识,特别是IOC容器的初始化流程。根据用户提供的引用内容,引用了四篇相关文章,我需要确保在回答中正确引用这些资料。 首先,IOC容器是Spring的核心,负责管理Bean的生命周期和依赖注入。用户想了解初始化与创建流程的详解,所以需要分步骤讲解。根据引用[2],入口是AbstractApplicationContext的refresh()方法,这个方法非常关键,所以应该作为重点。 接下来,我需要整理初始化流程的主要步骤。根据引用[1],资源配置的加载、解析、生成BeanDefinition并注册到容器中,这是初始化的入口。所以第一步应该是BeanDefinition的加载和注册。然后,引用[2]提到refresh方法中的关键时机点,需要将这些步骤展开,比如prepareRefresh()、obtainFreshBeanFactory()、prepareBeanFactory()等。 每个步骤需要简明扼要地解释其作用。例如,BeanFactory的创建阶段,需要说明如何读取配置文件,解析成BeanDefinition,并注册到BeanFactory中。这里要提到Resource定位、BeanDefinition的解析和注册过程,参考引用[1]和[2]。 然后是prepareBeanFactory(),设置类加载器、SPEL解析器等,这部分属于容器配置阶段,引用[4]提到的高级特性可能涉及依赖注入的原理,需要关联到DI的配置。 接下来是BeanFactoryPostProcessor的处理,这里可以举例子,比如PropertySourcesPlaceholderConfigurer,说明其作用。再然后是BeanPostProcessor的注册,这是处理Bean初始化前后逻辑的关键,比如AOP代理就是在这里处理的,需要引用[4]提到的依赖注入方法。 完成BeanFactory初始化后,需要提到初始化单例Bean,这是容器启动时预实例化的步骤,确保依赖注入完成。最后,发布事件,完成容器的启动,这部分在引用[2]中有提到refresh方法的汇总。 在回答过程中,要确保使用正确的中文术语,并且按照用户的系统级指令,数学公式用$...$,但这个问题可能不太涉及数学表达式,所以可能不需要。另外,生成相关问题时要围绕Spring IOC容器的初始化流程,比如生命周期、扩展点、配置方式比较等,参考用户示例的结构。 最后,检查引用标识是否正确添加,确保每个引用对应的内容准确无误,并且自然地融入回答中,避免生硬。同时,回答结构要清晰,分步骤讲解,帮助用户逐步理解整个流程。</think>### Spring IOC容器初始化与创建流程详解 Spring IOC容器的初始化过程围绕`AbstractApplicationContext`的`refresh()`方法展开,这是容器初始化的核心入口[^2]。以下是流程的详细步骤: --- #### 1. **BeanFactory创建阶段** **目标**:创建`BeanFactory`并加载Bean定义 - **`obtainFreshBeanFactory()`** 该方法会销毁旧BeanFactory并创建新的`DefaultListableBeanFactory`,然后通过`loadBeanDefinitions()`加载配置: ```java protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { refreshBeanFactory(); return getBeanFactory(); } ``` - **Resource定位**:根据XML路径或注解配置定位资源文件[^1] - **BeanDefinition解析**:将`<bean>`标签或`@Component`注解解析为`BeanDefinition`对象 - **注册到容器**:通过`BeanDefinitionRegistry`将Bean定义注册到BeanFactory的`beanDefinitionMap`中 --- #### 2. **容器配置阶段** **目标**:为BeanFactory配置基础功能 - **`prepareBeanFactory(beanFactory)`** - 设置类加载器、SPEL表达式解析器 - 注册环境变量、属性编辑器等基础设施[^4] - 添加`ApplicationContextAwareProcessor`以支持Aware接口 --- #### 3. **BeanFactory扩展处理** **目标**:通过扩展点增强容器功能 - **`invokeBeanFactoryPostProcessors(beanFactory)`** 调用`BeanFactoryPostProcessor`对Bean定义进行修改,例如: - `PropertySourcesPlaceholderConfigurer`:解析`${}`占位符 - `ConfigurationClassPostProcessor`:处理`@Configuration`类[^4] --- #### 4. **BeanPostProcessor注册** **目标**:注册Bean生命周期处理器 - **`registerBeanPostProcessors(beanFactory)`** 从BeanFactory中查找所有`BeanPostProcessor`并注册,例如: - `AutowiredAnnotationBeanPostProcessor`:处理`@Autowired`注入 - `CommonAnnotationBeanPostProcessor`:处理`@Resource`等JSR-250注解 --- #### 5. **初始化单例Bean** **目标**:实例化所有非懒加载的单例Bean - **`finishBeanFactoryInitialization(beanFactory)`** 通过`getBean()`触发Bean的实例化、属性填充和初始化: ```java protected void finishBeanFactoryInitialization(...) { beanFactory.preInstantiateSingletons(); } ``` - **依赖注入**:根据BeanDefinition中的元数据注入依赖(构造器注入或Setter注入)[^3] - **生命周期回调**:执行`InitializingBean.afterPropertiesSet()`和`@PostConstruct`方法 --- #### 6. **容器启动完成** **目标**:发布事件并完成初始化 - **`finishRefresh()`** - 发布`ContextRefreshedEvent`事件 - 启动内嵌Web容器(如Spring Boot场景) --- ### 流程图总结 ```mermaid graph TD A[refresh()入口] --> B[创建BeanFactory] B --> C[加载Bean定义] C --> D[配置BeanFactory] D --> E[处理BeanFactoryPostProcessor] E --> F[注册BeanPostProcessor] F --> G[初始化单例Bean] G --> H[发布完成事件] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值