小编Pet*_*ugh的帖子

PyQt4中有多个类

在学习了Python基础知识后,我现在正在尝试使用PyQt4进行GUI.不幸的是,我现在不知道如何使用多个课程,并花了很多时间试图在线获得答案,而不是真正找到正确的答案,我希望你现在可以帮助我.

所以这是我的示例代码:

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.b1 = QtGui.QPushButton("Button", self)
        self.b1.move(100,100)


        self.setGeometry(300,300,200,200)
        self.setWindowTitle("Example")
        self.show()

class Bar(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.initUI()

    def initUI(self):

        self.statusBar().showMessage("Statusbar")


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

现在只有"示例"类中的Button显示但不显示"Bar"类中的statusBar.那么我怎么能同时使用这两个类呢?一个人是否必须继承另一个人的东西?对不起,如果这可能非常笨拙并且有很多错误,但谢谢你能帮助我!

python inheritance class pyqt4 python-3.x

4
推荐指数
1
解决办法
1529
查看次数

为什么unique_ptr <T> ::〜unique_ptr需要T的定义?

如果我有一个班级'酒吧':

// bar.h
class Bar
{
public:

    Bar() { }
};
Run Code Online (Sandbox Code Playgroud)

我转发声明在另一个类'Foo'中使用std :: unique_ptr:

// foo.h
#include <memory>

class Bar;

class Foo
{

public:

    Foo();

private:

    std::unique_ptr<Bar> bar_;
};
Run Code Online (Sandbox Code Playgroud)

我将其定义包含在Foo的实现文件中:

// foo.cpp
#include "foo.h"
#include "bar.h"

Foo::Foo()
: bar_(new Bar)
{ }
Run Code Online (Sandbox Code Playgroud)

我得到编译时错误"'sizeof'的无效应用程序到一个不完整的类型'Bar'".

我从这里这里理解为了解决这个问题,我可以在foo.h中声明Foo的析构函数并将其空定义移动到foo.cpp.我不明白的是,为什么要修复它.我读到std :: unique_ptr有时需要知道其类型的完整定义.如果我必须从bar.h包含Bar以便unique_ptr看到它的定义,那对我来说是有意义的.但是Foo的析构函数与Bar的可见性有什么关系?为什么在foo.h中声明~Foo()并在foo.cpp中定义它会使错误无效?

c++ smart-pointers std c++11

4
推荐指数
1
解决办法
389
查看次数

python if子句中的奇怪行为

我用python写了一个简单的小石头,剪刀纸游戏,并且在if子句上遇到了一些困难,这是相关代码:

def play():
    user = str(input("rock, paper or scissors? Choose one: "))
    print("You chose", user)

    if user == "paper" or "Paper":
        paper()

    elif user == "rock" or "Rock":
        rock()

    elif user == "scissors" or "Scissors":
        scissors()

    else:
        print("Sorry, your choice was not valid, try again please.")
        play()
Run Code Online (Sandbox Code Playgroud)

现在,无论我选择石头,纸张还是剪刀,它总是会触发第一个条件,从而使我进入纸张功能。我实际上已经解决了它,这是我在if子句中输入的第二个条件,即“ Paper”,“ Rock”和“ Scissors”,这些是我在大写中用大写第一个字母表示的。我的问题是,为什么第二个条件触发了第一个if子句?当我移走所有第二根弦时,它工作得非常好,岩石触发了第二个条件,剪刀一个触发了第三个条件,依此类推。我希望这不要太令人困惑。谢谢。

python if-statement clause

0
推荐指数
1
解决办法
1044
查看次数