QRadioButton 單選按鈕

QRadioButton 是 PyQt6 里的單選按鈕控件,這篇教學(xué)會介紹如何在 PyQt6 窗口里加入 QRadioButton 單選按鈕,并進(jìn)行一些基本的樣式設(shè)定,以及進(jìn)行按鈕群組和點擊事件的設(shè)定。
快速預(yù)覽:
加入QRadioButton單選按鈕
QRadioButton 位置設(shè)定
QRadioButton 樣式設(shè)定
QRadioButton 點擊事件
加入QRadioButton單選按鈕
建立 PyQt6 窗口物件后,透過 QtWidgets.QRadioButton(widget)
方法,就能在指定的控件中建立單選按鈕,下方的程式碼執(zhí)行后,會加入兩個 QRadioButton 按鈕 ,并使用 setText() 方法加入文字。
注意,放在同樣控件里的 QRadioButton 視為同一個群組,會套用「單選」的規(guī)則,例如下方程式碼的兩個 QRadioButton 都放在 Form 里,所以只能擇一選擇。
?from PyQt6 import QtWidgets
?import sys
?app = QtWidgets.QApplication(sys.argv)
?
?Form = QtWidgets.QWidget()
?Form.setWindowTitle('千牛編程思維')
?Form.resize(300, 200)
?
?rb_a = QtWidgets.QRadioButton(Form) ? ?
?rb_a.setGeometry(30, 30, 100, 20)
?rb_a.setText('A')
?
?rb_b = QtWidgets.QRadioButton(Form) ?
?rb_b.setGeometry(30, 60, 100, 20)
?rb_b.setText('B')
?
?Form.show()
?sys.exit(app.exec())
class 寫法:
?from PyQt6 import QtWidgets
?import sys
?
?class MyWidget(QtWidgets.QWidget):
? ? ?def __init__(self):
? ? ? ? ?super().__init__()
? ? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ? ?self.resize(320, 240)
? ? ? ? ?self.ui()
?
? ? ?def ui(self):
? ? ? ? ?self.rb_a = QtWidgets.QRadioButton(self) ?
? ? ? ? ?self.rb_a.setGeometry(30, 30, 100, 20)
? ? ? ? ?self.rb_a.setText('A')
?
? ? ? ? ?self.rb_b = QtWidgets.QRadioButton(self) ? ?
? ? ? ? ?self.rb_b.setGeometry(30, 60, 100, 20)
? ? ? ? ?self.rb_b.setText('B')
?
?if __name__ == '__main__':
? ? ?app = QtWidgets.QApplication(sys.argv)
? ? ?Form = MyWidget()
? ? ?Form.show()
? ? ?sys.exit(app.exec())

如果有「多組」QRadioButton,則可以使用 QtWidgets.QButtonGroup(widget)
方法建立按鈕群組,然后將歸類為同一組的 QRadioButton 加入同一個 QButtonGroup,就能分別進(jìn)行單選的動作。
?from PyQt6 import QtWidgets
?import sys
?
?app = QtWidgets.QApplication(sys.argv)
?
?Form = QtWidgets.QWidget()
?Form.setWindowTitle('千牛編程思維')
?Form.resize(320, 240)
?
?rb_a = QtWidgets.QRadioButton(Form) ? ?
?rb_a.setGeometry(30, 30, 100, 20)
?rb_a.setText('A')
?
?rb_b = QtWidgets.QRadioButton(Form) ?
?rb_b.setGeometry(30, 60, 100, 20)
?rb_b.setText('B')
?
?group1 = QtWidgets.QButtonGroup(Form) ?# 按鈕群組
?group1.addButton(rb_a) ? ? ? ? ? ? ? ?
?group1.addButton(rb_b) ? ? ? ? ? ? ? ?
?
?rb_c = QtWidgets.QRadioButton(Form) ? ?
?rb_c.setGeometry(150, 30, 100, 20)
?rb_c.setText('C')
?
?rb_d = QtWidgets.QRadioButton(Form) ? ?
?rb_d.setGeometry(150, 60, 100, 20)
?rb_d.setText('D')
?
?group2 = QtWidgets.QButtonGroup(Form) ?
?group2.addButton(rb_c) ? ? ? ? ? ? ? ?
?group2.addButton(rb_d) ? ? ? ? ? ? ? ?
?
?Form.show()
?sys.exit(app.exec())
class 寫法:
?from PyQt6 import QtWidgets
?import sys
?
?class MyWidget(QtWidgets.QWidget):
? ? ?def __init__(self):
? ? ? ? ?super().__init__()
? ? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ? ?self.resize(320, 240)
? ? ? ? ?self.ui()
?
? ? ?def ui(self):
? ? ? ? ?self.rb_a = QtWidgets.QRadioButton(self)
? ? ? ? ?self.rb_a.setGeometry(30, 30, 100, 20)
? ? ? ? ?self.rb_a.setText('A')
?
? ? ? ? ?self.rb_b = QtWidgets.QRadioButton(self) ? ?
? ? ? ? ?self.rb_b.setGeometry(30, 60, 100, 20)
? ? ? ? ?self.rb_b.setText('B')
?
? ? ? ? ?self.group1 = QtWidgets.QButtonGroup(self) ?# 按鈕群組
? ? ? ? ?self.group1.addButton(self.rb_a) ? ? ? ? ?
? ? ? ? ?self.group1.addButton(self.rb_b) ? ? ? ? ? ?
?
? ? ? ? ?self.rb_c = QtWidgets.QRadioButton(self) ? ?
? ? ? ? ?self.rb_c.setGeometry(150, 30, 100, 20)
? ? ? ? ?self.rb_c.setText('C')
?
? ? ? ? ?self.rb_d = QtWidgets.QRadioButton(self) ? ?
? ? ? ? ?self.rb_d.setGeometry(150, 60, 100, 20)
? ? ? ? ?self.rb_d.setText('D')
?
? ? ? ? ?self.group2 = QtWidgets.QButtonGroup(self)
? ? ? ? ?self.group2.addButton(self.rb_c) ? ? ? ? ? ?
? ? ? ? ?self.group2.addButton(self.rb_d) ? ? ? ? ? ?
?
?if __name__ == '__main__':
? ? ?app = QtWidgets.QApplication(sys.argv)
? ? ?Form = MyWidget()
? ? ?Form.show()
? ? ?sys.exit(app.exec())

QRadioButton 位置設(shè)定
透過下列 QRadioButton 方法,可以將 QRadioButton 控件定位到指定的位置:
方法參數(shù)說明移動x, y設(shè)定 QRadioButton 在擺放的父控件中的 xy 坐標(biāo),x 往右為正,y 往下為正,尺寸根據(jù)內(nèi)容自動延伸。設(shè)置幾何()X,X,Y,W,H設(shè)定 QRadioButton 在擺放的父控件中的 xy 坐標(biāo)和長寬尺寸,x 往右為正,y 往下為正,如果超過長寬尺寸,預(yù)設(shè)會被裁切無法顯示。
下方的程式碼執(zhí)行后會放入四個 QRadioButton,兩個使用 move() 定位,另外兩個使用 setGeometry() 方法定位。
?from PyQt6 import QtWidgets
?import sys
?
?app = QtWidgets.QApplication(sys.argv)
?
?Form = QtWidgets.QWidget()
?Form.setWindowTitle('千牛編程思維')
?Form.resize(320, 240)
?
?rb_a = QtWidgets.QRadioButton(Form) ?# 單選按鈕 A
?rb_a.move(30, 30)
?rb_a.setText('A')
?
?rb_b = QtWidgets.QRadioButton(Form) ?# 單選按鈕 C
?rb_b.move(30, 60)
?rb_b.setText('B')
?
?rb_c = QtWidgets.QRadioButton(Form) ?# 單選按鈕 D
?rb_c.setGeometry(150, 30, 100, 20)
?rb_c.setText('C')
?
?rb_d = QtWidgets.QRadioButton(Form) ?# 單選按鈕 E
?rb_d.setGeometry(150, 60, 100, 20)
?rb_d.setText('D')
?
?Form.show()
?sys.exit(app.exec())
class 寫法:
?from PyQt6 import QtWidgets
?import sys
?
?class MyWidget(QtWidgets.QWidget):
? ? ?def __init__(self):
? ? ? ? ?super().__init__()
? ? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ? ?self.resize(320, 240)
? ? ? ? ?self.ui()
?
? ? ?def ui(self):
? ? ? ? ?self.rb_a = QtWidgets.QRadioButton(self) ?# 單選按鈕 A
? ? ? ? ?self.rb_a.move(30, 30)
? ? ? ? ?self.rb_a.setText('A')
?
? ? ? ? ?self.rb_b = QtWidgets.QRadioButton(self) ?# 單選按鈕 C
? ? ? ? ?self.rb_b.move(30, 60)
? ? ? ? ?self.rb_b.setText('B')
?
? ? ? ? ?self.rb_c = QtWidgets.QRadioButton(self) ?# 單選按鈕 D
? ? ? ? ?self.rb_c.setGeometry(150, 30, 100, 20)
? ? ? ? ?self.rb_c.setText('C')
?
? ? ? ? ?self.rb_d = QtWidgets.QRadioButton(self) ?# 單選按鈕 E
? ? ? ? ?self.rb_d.setGeometry(150, 60, 100, 20)
? ? ? ? ?self.rb_d.setText('D')
?
?if __name__ == '__main__':
? ? ?app = QtWidgets.QApplication(sys.argv)
? ? ?Form = MyWidget()
? ? ?Form.show()
? ? ?sys.exit(app.exec())

QRadioButton 狀態(tài)設(shè)定
透過下列幾種方法,可以設(shè)定 QRadioButton 的狀態(tài):
方法參數(shù)說明設(shè)置已禁用()布爾是否停用,預(yù)設(shè) False 啟用,可設(shè)定 True 停用。已檢查過()布爾是否勾選,預(yù)設(shè) False 不勾選,可設(shè)定 True 勾選,若同一組有多個勾選,則以最后一個為主。切換開關(guān)勾選狀態(tài)切換。
下面的程式碼執(zhí)行后,QRadioButton B 會停用,QRadioButton C 會預(yù)先勾選。
?from PyQt6 import QtWidgets
?import sys
?
?app = QtWidgets.QApplication(sys.argv)
?
?Form = QtWidgets.QWidget()
?Form.setWindowTitle('千牛編程思維')
?Form.resize(320, 240)
?
?rb_a = QtWidgets.QRadioButton(Form)
?rb_a.setGeometry(30, 30, 100, 20)
?rb_a.setText('A')
?
?rb_b = QtWidgets.QRadioButton(Form)
?rb_b.setGeometry(30, 60, 100, 20)
?rb_b.setText('B')
?rb_b.setDisabled(True) ? # 停用
?
?rb_c = QtWidgets.QRadioButton(Form)
?rb_c.setGeometry(30, 90, 100, 20)
?rb_c.setText('C')
?rb_c.setChecked(True) ? ?# 預(yù)先勾選
?
?Form.show()
?sys.exit(app.exec())
class 寫法:
?from PyQt6 import QtWidgets
?import sys
?
?class MyWidget(QtWidgets.QWidget):
? ? ?def __init__(self):
? ? ? ? ?super().__init__()
? ? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ? ?self.resize(320, 240)
? ? ? ? ?self.ui()
?
? ? ?def ui(self):
? ? ? ? ?self.rb_a = QtWidgets.QRadioButton(self)
? ? ? ? ?self.rb_a.setGeometry(30, 30, 100, 20)
? ? ? ? ?self.rb_a.setText('A')
?
? ? ? ? ?self.rb_b = QtWidgets.QRadioButton(self)
? ? ? ? ?self.rb_b.setGeometry(30, 60, 100, 20)
? ? ? ? ?self.rb_b.setText('B')
? ? ? ? ?self.rb_b.setDisabled(True) # 停用
?
? ? ? ? ?self.rb_c = QtWidgets.QRadioButton(self)
? ? ? ? ?self.rb_c.setGeometry(30, 90, 100, 20)
? ? ? ? ?self.rb_c.setText('C')
? ? ? ? ?self.rb_c.setChecked(True)
?
?if __name__ == '__main__':
? ? ?app = QtWidgets.QApplication(sys.argv)
? ? ?Form = MyWidget()
? ? ?Form.show()
? ? ?sys.exit(app.exec())

QRadioButton 樣式設(shè)定
如果會使用網(wǎng)頁 CSS 語法,就能透過 setStyleSheet() 設(shè)定 QRadioButton 樣式,在設(shè)計樣式上也較為彈性好用,下方的程式碼執(zhí)行后,會套用 CSS 樣式語法,將 QRadioButton 設(shè)定為藍(lán)色字,當(dāng)滑鼠移到按鈕上,就會觸發(fā) hover 的樣式而變成紅色字。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('千牛編程思維')
Form.resize(320, 240)
rb_a = QtWidgets.QRadioButton(Form)
rb_a.setGeometry(30, 30, 100, 20)
rb_a.setText('A')
# 設(shè)置按鈕A的樣式
rb_a.setStyleSheet('''
? ?QRadioButton {
? ? ? ?color: #00f;
? ?}
? ?QRadioButton:hover {
? ? ? ?color:#f00;
? ?}
''')
rb_b = QtWidgets.QRadioButton(Form)
rb_b.setGeometry(30, 60, 100, 20)
rb_b.setText('B')
# 設(shè)置按鈕B的樣式
rb_b.setStyleSheet('''
? ?QRadioButton {
? ? ? ?color: #00f;
? ?}
? ?QRadioButton:hover {
? ? ? ?color:#f00;
? ?}
''')
Form.show()
sys.exit(app.exec())
class 寫法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ?self.resize(320, 240)
? ? ? ?self.ui()
? ?def ui(self):
? ? ? ?self.rb_a = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_a.setGeometry(30, 30, 100, 20)
? ? ? ?self.rb_a.setText('A')
? ? ? ?# 設(shè)置按鈕A的樣式
? ? ? ?self.rb_a.setStyleSheet('''
? ? ? ? ? ?QRadioButton {
? ? ? ? ? ? ? ?color: #00f;
? ? ? ? ? ?}
? ? ? ? ? ?QRadioButton:hover {
? ? ? ? ? ? ? ?color:#f00;
? ? ? ? ? ?}
? ? ? ?''')
? ? ? ?self.rb_b = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_b.setGeometry(30, 60, 100, 20)
? ? ? ?self.rb_b.setText('B')
? ? ? ?# 設(shè)置按鈕B的樣式
? ? ? ?self.rb_b.setStyleSheet('''
? ? ? ? ? ?QRadioButton {
? ? ? ? ? ? ? ?color: #00f;
? ? ? ? ? ?}
? ? ? ? ? ?QRadioButton:hover {
? ? ? ? ? ? ? ?color:#f00;
? ? ? ? ? ?}
? ? ? ?''')
if __name__ == '__main__':
? ?app = QtWidgets.QApplication(sys.argv)
? ?Form = MyWidget()
? ?Form.show()
? ?sys.exit(app.exec())

如果使用 setDisabled(True) 將 QRadioButton 設(shè)定為「停用」,也可透過 disabled 的樣式表進(jìn)行樣式的設(shè)定,下方的程式碼執(zhí)行后,單選按鈕 B 會變成淺灰色
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('千牛編程思維')
Form.resize(320, 240)
rb_a = QtWidgets.QRadioButton(Form)
rb_a.setGeometry(30, 30, 100, 20)
rb_a.setText('A')
rb_a.setStyleSheet('''
? ?QRadioButton {
? ? ? ?color: #00f;
? ?}
? ?QRadioButton:hover {
? ? ? ?color:#f00;
? ?}
''')
rb_b = QtWidgets.QRadioButton(Form)
rb_b.setGeometry(30, 60, 100, 20)
rb_b.setText('B')
rb_b.setStyleSheet('''
? ?QRadioButton {
? ? ? ?color: #00f;
? ?}
? ?QRadioButton:hover {
? ? ? ?color:#f00;
? ?}
? ?QRadioButton:disabled {
? ? ? ?color:#ccc;
? ?}
''')
rb_b.setDisabled(True) ? # 停用按鈕 B
Form.show()
sys.exit(app.exec())
class 寫法:
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ?self.resize(320, 240)
? ? ? ?self.ui()
? ?def ui(self):
? ? ? ?self.rb_a = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_a.setGeometry(30, 30, 100, 20)
? ? ? ?self.rb_a.setText('A')
? ? ? ?# 設(shè)置按鈕A的樣式
? ? ? ?self.rb_a.setStyleSheet('''
? ? ? ? ? ?QRadioButton {
? ? ? ? ? ? ? ?color: #00f;
? ? ? ? ? ?}
? ? ? ? ? ?QRadioButton:hover {
? ? ? ? ? ? ? ?color:#f00;
? ? ? ? ? ?}
? ? ? ?''')
? ? ? ?self.rb_b = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_b.setGeometry(30, 60, 100, 20)
? ? ? ?self.rb_b.setText('B')
? ? ? ?# 設(shè)置按鈕B的樣式
? ? ? ?self.rb_b.setStyleSheet('''
? ? ? ? ? ?QRadioButton {
? ? ? ? ? ? ? ?color: #00f;
? ? ? ? ? ?}
? ? ? ? ? ?QRadioButton:hover {
? ? ? ? ? ? ? ?color:#f00;
? ? ? ? ? ?}
? ? ? ? ? ?QRadioButton:disabled {
? ? ? ? ? ? ? ?color:#ccc;
? ? ? ? ? ?}
? ? ? ?''')
? ? ? ?self.rb_b.setDisabled(True) ? # 停用按鈕 B
if __name__ == '__main__':
? ?app = QtWidgets.QApplication(sys.argv)
? ?Form = MyWidget()
? ?Form.show()
? ?sys.exit(app.exec())

QRadioButton 點擊事件
如果要偵測勾選了哪個 QRadioButton,有兩種常用的方法,第一種是透過 QButtonGroup() 將 QRadioButton 包裝成同一個群組,使用 addButton() 添加按鈕時,可設(shè)定第二個按鈕的 ID 參數(shù),設(shè)定后使用 buttonClicked.connect(fn)
方法,就能偵測是否勾選按鈕,并能夠過函數(shù),執(zhí)行 checkedId() 取得勾選按鈕的 ID,下方的程式碼執(zhí)行后,會在勾選不同按鈕時,透過 QLabel 顯示對應(yīng)的勾選按鈕的 ID。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('千牛編程思維')
Form.resize(320, 240)
rb_a = QtWidgets.QRadioButton(Form)
rb_a.setGeometry(30, 60, 100, 20)
rb_a.setText('A')
rb_b = QtWidgets.QRadioButton(Form)
rb_b.setGeometry(150, 60, 100, 20)
rb_b.setText('B')
def show():
? ?label.setText(str(group.checkedId())) ?
group = QtWidgets.QButtonGroup(Form)
group.addButton(rb_a, 1) ? ? ? ? ? ? ?
group.addButton(rb_b, 2) ? ? ? ? ? ? ?
group.buttonClicked.connect(show) ? ?
label = QtWidgets.QLabel(Form)
label.setGeometry(30, 30, 100, 20)
Form.show()
sys.exit(app.exec())
class 寫法 ( 注意不能使用 show 作為方法名稱,會覆寫基類的 show 方法造成無法顯示 ):
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ?self.resize(320, 240)
? ? ? ?self.ui()
? ?def ui(self):
? ? ? ?self.label = QtWidgets.QLabel(self)
? ? ? ?self.label.setGeometry(30, 30, 100, 20)
? ? ? ?self.rb_a = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_a.setGeometry(30, 60, 100, 20)
? ? ? ?self.rb_a.setText('A')
? ? ? ?self.rb_b = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_b.setGeometry(150, 60, 100, 20)
? ? ? ?self.rb_b.setText('B')
? ? ? ?self.group = QtWidgets.QButtonGroup(self)
? ? ? ?self.group.addButton(self.rb_a, 1) ? ? ? ? ? ? ?
? ? ? ?self.group.addButton(self.rb_b, 2) ? ? ? ? ? ? ?
? ? ? ?self.group.buttonClicked.connect(self.showId) ? ? ?
? ?def showId(self):
? ? ? ?self.label.setText(str(self.group.checkedId())) ?
if __name__ == '__main__':
? ?app = QtWidgets.QApplication(sys.argv)
? ?Form = MyWidget()
? ?Form.show()
? ?sys.exit(app.exec())

第二種方法則是使用 toggled() 的方法,將函數(shù)與各個按鈕綁定,接著就能透過 text() 取得按鈕文字,透過 isChecked() 取得按鈕勾選狀態(tài)。
from PyQt6 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('千牛編程思維')
Form.resize(320, 240)
def show(rb):
? ?label.setText(rb.text() + ':' + str(rb.isChecked())) ?
rb_a = QtWidgets.QRadioButton(Form)
rb_a.setGeometry(30, 60, 100, 20)
rb_a.setText('A')
rb_a.toggled.connect(lambda: show(rb_a))
rb_b = QtWidgets.QRadioButton(Form)
rb_b.setGeometry(150, 60, 100, 20)
rb_b.setText('B')
rb_b.toggled.connect(lambda: show(rb_b))
group = QtWidgets.QButtonGroup(Form)
group.addButton(rb_a)
group.addButton(rb_b)
label = QtWidgets.QLabel(Form)
label.setGeometry(30, 30, 100, 20)
Form.show()
sys.exit(app.exec())
class 的寫法 ( 注意不能使用 show 作為方法名稱,會覆寫基類的 show 方法造成無法顯示 ):
from PyQt6 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
? ?def __init__(self):
? ? ? ?super().__init__()
? ? ? ?self.setWindowTitle('千牛編程思維')
? ? ? ?self.resize(320, 240)
? ? ? ?self.ui()
? ?def ui(self):
? ? ? ?self.label = QtWidgets.QLabel(self)
? ? ? ?self.label.setGeometry(30, 30, 100, 20)
? ? ? ?self.rb_a = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_a.setGeometry(30, 60, 100, 20)
? ? ? ?self.rb_a.setText('A')
? ? ? ?self.rb_b = QtWidgets.QRadioButton(self)
? ? ? ?self.rb_b.setGeometry(150, 60, 100, 20)
? ? ? ?self.rb_b.setText('B')
? ? ? ?self.rb_a.toggled.connect(lambda: self.showState(self.rb_a)) ?# 綁定函數(shù)
? ? ? ?self.group = QtWidgets.QButtonGroup(self)
? ? ? ?self.group.addButton(self.rb_a)
? ? ? ?self.group.addButton(self.rb_b)
? ? ? ?self.rb_b.toggled.connect(lambda: self.showState(self.rb_b)) ?# 綁定函數(shù)
? ?def showState(self, rb):
? ? ? ?self.label.setText(rb.text() + ':' + str(rb.isChecked())) ?# 取得按鈕狀態(tài)
if __name__ == '__main__':
? ?app = QtWidgets.QApplication(sys.argv)
? ?Form = MyWidget()
? ?Form.show()
? ?sys.exit(app.exec())