一、QDialog對話框
QDialog是所有對話框的父類,其子類包含:
1)QMessageBox
2)QColorDialog
3)QFileDialog
4)QFontDialog
5)QInputDialog
def initUI9(self): self.resize(200, 100) button = QPushButton("彈出對話框") button.clicked.connect(self.showDialog) layout = QVBoxLayout() layout.addWidget(button) self.setLayout(layout) def showDialog(self): dialog = QDialog() btn = QPushButton('關閉', dialog) btn.clicked.connect(dialog.close) btn.move(50, 50) dialog.setWindowTitle('對話框') dialog.setWindowModality(Qt.ApplicationModal) # 當對話框顯示時,主窗口的所有控件都不可用 dialog.exec() # 顯示對話框
效果:
二、QMessageBox對話框
QMessageBox是消息對話框,主要有一下幾種:
1)關於對話框
2)錯誤對話框
3)警告對話框
4)提問對話框
5)消息對話框
這些對話框主要有兩點不同:
1)顯示的對話框圖標可能不同
2)顯示的按鈕可能不同,但是一般可以設置想要的按鈕
1.關於對話框
QMessageBox.about(self, '關於', '這是一個關於對話框')
效果:
可以看到,關於對話框顯示了窗口小圖標、大圖標、還有一個OK按鈕。
2.消息對話框
QMessageBox.information(self, '消息', '這是一個消息對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
QMessageBox.Yes | QMessageBox.No 表示要顯示什么樣的按鈕,最后一個參數表示默認選中哪個按鈕。
效果:
3.警告對話框
QMessageBox.warning(self, '警告', '這是一個警告對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
效果:
4.錯誤對話框
QMessageBox.critical(self, '錯誤', '這是一個錯誤對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
效果:
5.提問對話框
QMessageBox.question(self, '提問', '這是一個提問對話框', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
效果:
三、QInputDialog對話框
QInputDialog用於幫助我們輸入數據。有一下幾種輸入對話框:
1)getItem,從ComboBox中選擇
2)getText,從LineEdit中獲取
3)getInt,從spinBox中獲取
1.getItem獲取值
def initUI9(self): self.resize(300, 200) self.button = QPushButton("輸入值") self.button.clicked.connect(self.inputDialog) self.lineEdit = QLineEdit() layout = QHBoxLayout() layout.addWidget(self.button) layout.addWidget(self.lineEdit) self.setLayout(layout) def inputDialog(self): items = ['python', 'C', 'C++', 'JAVA', 'Ruby'] text, ok = QInputDialog.getItem(self, '請選擇編程語言', '語言列表', items) if ok and text: self.lineEdit.setText(text) # 在InputDialog中選擇的值設置到lineEdit中
效果:
2.getText獲取值
def inputDialog(self): text, ok = QInputDialog.getText(self, '文本輸入框', '輸入編程語言') if ok and text: self.lineEdit.setText(text) # 在InputDialog中選擇的值設置到lineEdit中
效果:
3.getInt獲取值
def inputDialog(self): num, ok = QInputDialog.getInt(self, '整數輸入框', '輸入數字') if ok and num: self.lineEdit.setText(str(num)) # 在InputDialog中選擇的值設置到lineEdit中
效果:
四、QFontDialog字體對話框
def initUI(self): self.resize(300, 150) self.btn = QPushButton("選擇字體") self.btn.clicked.connect(self.popFontDialog) self.fontLabel = QLabel('hellop,測試字體例子') layout = QVBoxLayout() layout.addWidget(self.btn) layout.addWidget(self.fontLabel) self.setLayout(layout) # 添加窗口標題 self.setWindowTitle("FontDialog控件Demo") def popFontDialog(self): font, ok = QFontDialog.getFont() if ok: self.fontLabel.setFont(font)
效果:
五、QColorDialog顏色對話框
def initUI(self): self.resize(300, 150) self.btn = QPushButton("選擇顏色") self.btn.clicked.connect(self.popColorDialog) self.colorLabel = QLabel('hello,測試字體例子') layout = QVBoxLayout() layout.addWidget(self.btn) layout.addWidget(self.colorLabel) self.setLayout(layout) # 添加窗口標題 self.setWindowTitle("ColorDialog控件Demo") def popColorDialog(self): color = QColorDialog.getColor() p = QPalette() p.setColor(QPalette.WindowText, color) self.colorLabel.setPalette(p)
效果:
修改背景色:
def initUI(self): self.move(400,900) self.resize(300, 150) self.btn = QPushButton("選擇顏色") self.btn.clicked.connect(self.popColorDialog) self.colorLabel = QLabel('hello,測試字體例子') layout = QVBoxLayout() layout.addWidget(self.btn) layout.addWidget(self.colorLabel) self.setLayout(layout) # 添加窗口標題 self.setWindowTitle("ColorDialog控件Demo") def popColorDialog(self): color = QColorDialog.getColor() p = QPalette() p.setColor(QPalette.Window, color) self.colorLabel.setAutoFillBackground(True) # 允許自動填充背景色 self.colorLabel.setPalette(p) # 修改背景色
效果:
六、QFileDialog文件對話框
def initUI(self): self.resize(300, 150) self.btn1 = QPushButton("打開圖片") self.btn1.clicked.connect(self.loadImageFile) self.imageLabel = QLabel() self.btn2 = QPushButton("打開文本") self.btn2.clicked.connect(self.loadTextFile) self.content = QTextEdit() layout = QVBoxLayout() layout.addWidget(self.btn1) layout.addWidget(self.imageLabel) layout.addWidget(self.btn2) layout.addWidget(self.content) self.setLayout(layout) # 添加窗口標題 self.setWindowTitle("Demo") # 打開圖片文件 def loadImageFile(self): fname, _ = QFileDialog.getOpenFileName(self, '打開文件', './images', '圖像文件 (*.jpg *.png) ') self.imageLabel.setPixmap(QPixmap(fname)) # 打開文本文件 def loadTextFile(self): dialog = QFileDialog() dialog.setFileMode(QFileDialog.AnyFile) dialog.setFilter(QDir.Files) if dialog.exec(): filenames = dialog.selectedFiles() with open(filenames[0], 'r', encoding='utf-8') as f: data = f.read() self.content.setText(data)
效果:
===