1. 程式人生 > 實用技巧 >python- pyqt5 一個存疑問題

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的問題 是物件與類之間的關係我們搞混了 這不可能啊

所以得出結論 想設計這麼一個 點選按鈕生成新控制元件的程式 貌似真的不可行

我希望此問題可以解決