【问题标题】:How do I make a resizable window and a resizable background image using PyQt?如何使用 PyQt 制作可调整大小的窗口和可调整大小的背景图像?
【发布时间】:2015-11-24 19:38:35
【问题描述】:

我正在尝试制作一个应用程序,所以我开始构建主窗口,我花了一些时间弄清楚如何放置背景图像,但最后我得到了它,但是当我点击最大化窗口时,我注意到按钮不再像以前那样位于中心,背景图像也不会根据窗口的不同大小调整大小。我希望背景图像和按钮自动调整。 请帮助这个可怜的新手T.T

这是我的代码:

from PyQt4 import QtCore, QtGui
import sys

# Encoding Utf-8*
try:
    _from_utf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _from_utf8(s):
        return s
try:
    _encoding = QtGui.QApplication.UnicodeUTF8

    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

# Main Window


class Window (QtGui.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()

        self.setGeometry(100, 100, 800, 600)
        self.setWindowTitle(_from_utf8("Virtual Library"))
        self.setStyleSheet("background-image: url(nwlib.jpg);")

        # ExitOption
        menu_action1 = QtGui.QAction("Exit", self)
        menu_action1.setShortcut("Ctrl+Q")
        menu_action1.setStatusTip('Exit The App')
        menu_action1.triggered.connect(self.close_application)

        self.statusBar()

        # MenuBar
        main_menu = self.menuBar()
        file_menu = main_menu.addMenu('Options')
        file_menu.addAction(menu_action1)

        self.home()

    def home(self):

        # NewLibrary btn
        new_lib_btn = QtGui.QPushButton("New Library", self)
        new_lib_btn.setGeometry(QtCore.QRect(310, 180, 141, 41))

        # AccessLibrary btn
        access_lib_btn = QtGui.QPushButton("Access Library", self)
        access_lib_btn.setGeometry(QtCore.QRect(310, 250, 141, 41))

        # FindNewBooks btn
        find_nbooks = QtGui.QPushButton("Find New Books", self)
        find_nbooks.setGeometry(QtCore.QRect(310, 320, 141, 41))

        self.show()

    def close_application(self):
        choice = QtGui.QMessageBox.question(self, 'Exit',
                                        "Close the application?",
                                        QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
        if choice == QtGui.QMessageBox.Yes:
            sys.exit()
        else:
            pass


def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())


run()

【问题讨论】:

    标签: python pyqt window size background-image


    【解决方案1】:

    您需要一些布局来放置小部件,并且还需要设置对齐方式。我编辑了您的代码位以获得您想要的内容。我还编辑了关闭事件。

    从 PyQt4 导入 QtCore、QtGui 导入系统

    # Encoding Utf-8*
    try:
        _from_utf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _from_utf8(s):
            return s
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
    
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
    
    # Main Window
    
    
    class Window (QtGui.QMainWindow):
        def __init__(self):
            super(Window, self).__init__()
    
            self.setGeometry(100, 100, 800, 600)
            self.setWindowTitle(_from_utf8("Virtual Library"))
            self.setStyleSheet("background-image: url(nwlib.jpg);")
    
            # ExitOption
            menu_action1 = QtGui.QAction("Exit", self)
            menu_action1.setShortcut("Ctrl+Q")
            menu_action1.setStatusTip('Exit The App')
            menu_action1.triggered.connect(self.close_application)
    
            self.statusBar()
    
            # MenuBar
            main_menu = self.menuBar()
            file_menu = main_menu.addMenu('Options')
            file_menu.addAction(menu_action1)
    
            self.home()
    
        def home(self):
    
            # NewLibrary btn
            centralwidget = QtGui.QWidget(self)
            self.mainLayout = QtGui.QVBoxLayout(centralwidget)
            new_lib_btn = QtGui.QPushButton("New Library", self)
            new_lib_btn.setMinimumSize(141, 41)
    
            # AccessLibrary btn
            access_lib_btn = QtGui.QPushButton("Access Library", self)
            access_lib_btn.setMinimumSize(141, 41)
    
            # FindNewBooks btn
            find_nbooks = QtGui.QPushButton("Find New Books", self)
            find_nbooks.setMinimumSize(141, 41)
    
            self.mainLayout.addWidget(new_lib_btn)
            self.mainLayout.addWidget(access_lib_btn)
            self.mainLayout.addWidget(find_nbooks)
    
            self.mainLayout.setAlignment(QtCore.Qt.AlignCenter)
    
            self.setCentralWidget(centralwidget)
    
            self.show()
    
        def close_application(self):
            choice = QtGui.QMessageBox.question(self, 'Exit',
                                            "Close the application?",
                                            QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
            if choice == QtGui.QMessageBox.Yes:
                sys.exit()
            else:
                pass
    
    
    def run():
        app = QtGui.QApplication(sys.argv)
        GUI = Window()
        sys.exit(app.exec_())
    
    
    run()
    

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多