zoukankan      html  css  js  c++  java
  • 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的问题 是对象与类之间的关系我们搞混了 这不可能啊

    所以得出结论 想设计这么一个 点击按钮生成新控件的程序 这样是不行的

    转念一想 因为局部变量和全局变量

    在一个函数内生成的变量 会随着这个函数调用完毕而消散 ... 可是我们的初始化函数生成的那些控件不也是没有丢失么...

    要不要用指针?可是我也没见过什么指针的控件对象.........

    这样整个程序太麻烦了吧

    我希望此问题可以解决

  • 相关阅读:
    ArcGIS Pro 简明教程(2)基础操作和简单制图
    ArcGIS Pro 简明教程(1)Pro简介
    ArcGIS Pro 简明教程(3)数据编辑
    LocaSpaceViewer深度讲解(一)瓦片服务与数据下载
    迭代最近点算法 Iterative Closest Points
    应用Fast ICP进行点集或曲面配准 算法解析
    八叉树-OcTree
    2016年10月校招体会
    静态代码块&非静态代码块&构造函数
    avtivity与view
  • 原文地址:https://www.cnblogs.com/ranzhong/p/13874116.html
Copyright © 2011-2022 走看看