• 3221阅读
  • 0回复

解决第4章“信号和槽”中的例子"connections"对PyQt5+python3兼容性的问题 [复制链接]

上一主题 下一主题
离线wps2000
 

只看楼主 倒序阅读 楼主  发表于: 2016-10-15
先上原来的代码:
===================================================================
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *


if sys.version_info[:2] < (2, 5):
    def partial(func, arg):
        def callme():
            return func(arg)
        return callme
else:
    from functools import partial


class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        button1 = QPushButton("One")
        button2 = QPushButton("Two")
        button3 = QPushButton("Three")
        button4 = QPushButton("Four")
        button5 = QPushButton("Five")
        self.label = QLabel("Click a button...")

        layout = QHBoxLayout()
        layout.addWidget(button1)
        layout.addWidget(button2)
        layout.addWidget(button3)
        layout.addWidget(button4)
        layout.addWidget(button5)
        layout.addStretch()
        layout.addWidget(self.label)
        self.setLayout(layout)

        self.connect(button1, SIGNAL("clicked()"), self.one)
        self.button2callback = partial(self.anyButton, "Two")
        self.connect(button2, SIGNAL("clicked()"),
                     self.button2callback)
        self.button3callback = lambda who="Three": self.anyButton(who)
        self.connect(button3, SIGNAL("clicked()"),
                     self.button3callback)
        self.connect(button4, SIGNAL("clicked()"), self.clicked)
        self.connect(button5, SIGNAL("clicked()"), self.clicked)

        self.setWindowTitle("Connections")


    def one(self):
        self.label.setText("You clicked button 'One'")


    def anyButton(self, who):
        self.label.setText("You clicked button '%s'" % who)


    def clicked(self):
        button = self.sender()
        if button is None or not isinstance(button, QPushButton):
            return
        self.label.setText("You clicked button '%s'" % button.text())


app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

============================================================

再上改后的代码:

===============================================================
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


if sys.version_info[:2] < (2, 5):
    def partial(func, arg):
        def callme():
            return func(arg)
        return callme
else:
    from functools import partial


class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        button1 = QPushButton("One")
        button2 = QPushButton("Two")
        button3 = QPushButton("Three")
        button4 = QPushButton("Four")
        button5 = QPushButton("Five")
        self.label = QLabel("Click a button...")

        layout = QHBoxLayout()
        layout.addWidget(button1)
        layout.addWidget(button2)
        layout.addWidget(button3)
        layout.addWidget(button4)
        layout.addWidget(button5)
        layout.addStretch()
        layout.addWidget(self.label)
        self.setLayout(layout)
        button1.clicked.connect(self.one)
        self.button2callback = partial(self.anyButton, "Two")
        button2.clicked.connect(self.button2callback)
        self.button3callback = lambda :self.anyButton("Three")
        button3.clicked.connect(self.button3callback)
        button4.clicked.connect(self.clicked)
        button5.clicked.connect(self.clicked)

        self.setWindowTitle("Connections")


    def one(self):
        self.label.setText("You clicked button 'One'")


    def anyButton(self, who):
        self.label.setText("You clicked button '%s'" % who)


    def clicked(self):
        button = self.sender()
        if button is None or not isinstance(button, QPushButton):
            return
        self.label.setText("You clicked button '%s'" % button.text())


app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

快速回复
限100 字节
 
上一个 下一个