python- pyqt5 一个存疑问题
首先 我的问题是 自定义的方法中 无法给窗体中增加控件
我们直接看例子
这是一个图书管理系统的窗口
我们给他加上菜单(menuBar) 加上工具栏(QAction) 程序变成了这样
这个界面是这样的(我不习惯把图片放在项目源码的目录里 看我导入的目录 是../image我存在了上一级的单独的一个image文件夹里)
我只这么导入了一个图书查询.jpg 其他的先不管 所以只显示这一个图片
然后我们此时在初始化的函数 initUI 里 我们加一个label
我们跑一下程序
确实 label被移动到了 400 ,500这个位置
我们对按钮的点击事件设置一下 如果点击了这个图书查询按钮 我们让这个label移动到 200,250这个位置
我们点击按钮之后
诚然 label移动了
但是 如果我们想按一下这个按钮就生成label 然后label移动到想去的位置呢
这样理论上也是可以的吧
在我们点击之后
诚然 函数可以调用 因为print语句生效了
可是label呢?
也就是说 在自定义的方法里 无法生成窗体的控件么
那么我们如果想要点击这个按钮之后
下方会生成一些表格 来显示一些图书信息 这也是不可以的了
这到底是因为什么?因为有了菜单栏和工具栏么?
先来看一个例子
- from PyQt5.QtWidgets import *
- import sys
- class Window(QWidget):
- def __init__(self):
- QWidget.__init__(self)
- self.resize(900, 600)
- self.button = QPushButton('Click me',self)
- self.button.move(400,500)
- # self.button.setFlat(True)
- self.button.clicked.connect(self.on_button_clicked)
- def on_button_clicked(self):
- print("The button was pressed!")
- self.button.setText("wow")
- app = QApplication(sys.argv)
- screen = Window()
- screen.show()
- sys.exit(app.exec_())
是可行的
我们直接加了button
现在我们加个label
这个程序是可以跑的 没有布局也是可以跑的 因为move了位置
- from PyQt5.QtWidgets import *
- import sys
- class Window(QWidget):
- def __init__(self):
- QWidget.__init__(self)
- self.resize(900, 600)
- self.button = QPushButton('Click me',self)
- self.button.move(400,500)
- # self.button.setFlat(True)
- self.button.clicked.connect(self.on_button_clicked)
- self.label1 = QLabel("标签",self)
- self.label1.move(300,200)
- def on_button_clicked(self):
- print("The button was pressed!")
- self.button.setText("wow")
- app = QApplication(sys.argv)
- screen = Window()
- screen.show()
- sys.exit(app.exec_())
我们现在改改代码 让这个button点击时 生成一个label
- from PyQt5.QtWidgets import *
- import sys
- class Window(QWidget):
- def __init__(self):
- QWidget.__init__(self)
- self.resize(900, 600)
- self.button = QPushButton('Click me',self)
- self.button.move(400,500)
- # self.button.setFlat(True)
- self.button.clicked.connect(self.on_button_clicked)
- def on_button_clicked(self):
- print("The button was pressed!")
- self.button.setText("wow")
- self.label1 = QLabel("标签", self)
- self.label1.move(300, 200)
- app = QApplication(sys.argv)
- screen = Window()
- screen.show()
- sys.exit(app.exec_())
可见啊 这个自定义的点击方法 是不会生成新的窗体控件的
那么如果想通过按钮的点击来增加控件 对于pyqt5 是否是不可行的?
这个问题我至今也没明白
因为那个self 就是 window
他们都是window啊
就不可能是因为self的问题 是对象与类之间的关系我们搞混了 这不可能啊
所以得出结论 想设计这么一个 点击按钮生成新控件的程序 这样是不行的
转念一想 因为局部变量和全局变量
在一个函数内生成的变量 会随着这个函数调用完毕而消散 ... 可是我们的初始化函数生成的那些控件不也是没有丢失么...
要不要用指针?可是我也没见过什么指针的控件对象.........
这样整个程序太麻烦了吧
我希望此问题可以解决
python- pyqt5 一个存疑问题的更多相关文章
- Python+PyQT5的子线程更新UI界面的实例《新手必学》
今天小编就为大家分享一篇Python+PyQT5的子线程更新UI界面的实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧子线程里是不能更新UI界面的,在移动端方面.Android的U ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- python 获取一个列表有多少连续列表
python 获取一个列表有多少连续列表 例如 有列表 [1,2,3] 那么连续列表就是 [1,2],[2,3],[1,2,3] 程序实现如下: 运行结果:
- python是一个解释器
python是一个解释器 利用pip安装python插件的时候,观察到python的运作方式是逐步解释执行的 适合作为高级调度语言: 异常的处理以及效率应该是主要的问题
- 使用python检测一个设备是否ping的通
使用python检测一个设备是否ping的通 一,subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并 ...
- python 登陆一个网站
今天想用python写一个登陆的脚本,搜了一下,网上挺多的,看了一些后写了个登陆虎扑论坛的脚本. 原理: 只要在发送http请求时,带上含有正常登陆的cookie就可以了. 1.首先我们要先了解coo ...
- Python开发一个csv比较功能相关知识点汇总及demo
Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...
- Pyscripter是python下一个非常流行的开源IDE
Pyscripter 不能正确调用另一文件中模块的问题的解析(Internal Engine 和 Remote Engine) 背景 Pyscripter是python下一个非常流行的开源IDE,笔者 ...
- python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题
今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...
- python遍历一个目录,输出所有文件名
python遍历一个目录,输出所有文件名 python os模块 os import os def GetFileList(dir, fileList): newDir = dir if os. ...
随机推荐
- Spring Boot学习(二)搭建一个简易的Spring Boot工程
第一步:新建项目 新建一个SpringBoot工程 修改项目信息 勾选项目依赖和工具 选择好项目的位置,点击[Finish] 第二步:项目结构分析 新建好项目之后的结构如下图所示,少了很多配置文件: ...
- Android如何使用注解进行代码检查
原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流! Android Studio 内置了代码检查工具 Lint,可在菜单栏选择 Analyze > Inspect Code 执 ...
- C#编写一个较完整的记事本程序
开发环境 Visual Studio 2019 至少需安装 .NET桌面开发 创建项目并配置 创建窗体文件 配置项目名称及框架 设计界面 创建窗体文件,将控件摆放位置如下,参考系统自带的记事本程序 窗 ...
- 027 01 Android 零基础入门 01 Java基础语法 03 Java运算符 07 逻辑“与”运算符
027 01 Android 零基础入门 01 Java基础语法 03 Java运算符 07 逻辑"与"运算符 本文知识点:Java中的逻辑"与"运算符 逻辑运 ...
- Go path/filepath包
path/filepath 标准库path中有的功能filepath全部具备, 所以使用filepath即可. isABS() 判断一个路径是不是绝对路径. package main import ( ...
- 「Redis」字符串
原文链接:https://www.changxuan.top/?p=1109 简介 Redis 中自定义的字符串结构. 字符串是 Redis 中最常用的一种数据类型,在 Redis 中专门封装了一个字 ...
- RHSA-2018:0395-重要: 内核 安全和BUG修复更新(需要重启、本地提权、代码执行)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- 多测师讲解接口测试 _postman(上)_高级讲师肖sir
Postman 一.Postman介绍 Postman是一个网页调试工具,也可以调试css.html Postman的操作环境 环境:Postman Mac.Windows X32.Windows X ...
- 学不动了!微信官方推出 Web 前端和小程序统一框架 Kbone
听说最近微信官方推出了一个统一 Web 前端和小程序的框架 -- Kbone ,特意去看了下... 为什么微信要搞Kbone? 微信小程序的底层模型和 Web 端不同,开发者无法直接把 Web 端的代 ...
- 在VC6.0下运行C语言程序,以及编程入门必备的常识类小知识!
今天给大家分享在VC6.0环境下编写C语言程序的基本步骤,为初学者打开学习C语言的第一道门.具体步骤如下(如果需要软件资源,可以留言): 1)新建工作区 依次点击 文件--新建--工作区 或是Ctrl ...