RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1094367
Accepted
5478512
5478512
Asked:2020-03-14 00:51:24 +0000 UTC2020-03-14 00:51:24 +0000 UTC 2020-03-14 00:51:24 +0000 UTC

如何在 QScrollArea 中滚动小部件?

  • 772

我尝试添加QVBoxLayout - QScrollArea和QScrollBar。
如layout添加它们的小部件所示player(2 件)。

滚动时,小部件成倍增加。如果它很简单,那么你需要做QScrollAreaand QScrollBar,当滚动 which 时,它们会滚动player'ы。

它应该看起来如何,大约(小部件移出):

在此处输入图像描述

我得到什么:

在此处输入图像描述

这是部分代码: Main.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys, os

import player
class Main(QtWidgets.QWidget): 
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setFixedSize(750, 560)

        self.p1 = player.player_1()
        
        self.lay = QHBoxLayout(self)
        self.lay.setContentsMargins(0,0,0,0)
        
        self.scroll_area = QtWidgets.QScrollArea(self)                                        # 2
        self.scroll_area.setLayout(self.lay)
        self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        self.scrollbar = QtWidgets.QScrollBar(Qt.Horizontal, self)                            # 3
        self.scrollbar.setMaximum(250)

        self.scrollbar.valueChanged.connect(self.sync_func)                         # 4

        self.v_layout = QtWidgets.QVBoxLayout(self)
        self.v_layout.addWidget(self.scroll_area)
        self.v_layout.addWidget(self.scrollbar)

    def sync_func(self):
        self.scroll_area.horizontalScrollBar().setValue(self.scrollbar.value() * 1)

        self.lay.addWidget(Sttings())
        self.lay.addWidget(player.player_1())
        self.lay.addWidget(player.player_1())


        self.transition()

    def transition(self):

        player.reputation_perem = player.reputation_perem + (player.reputation_perem / 100 * 5)
        player.money_perem = player.money_perem + player.income_perem

       #reputation_perem_2 = reputation_perem_2 + (reputation_perem_2 / 100 * 5)
       #income_perem_2 = income_perem_old_2 / 100 * (100 - (100 - reputation_perem_2))
       #money_perem_2 = money_perem_2 + income_perem_2
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)                        
    w = Main()
    w.show()

    file = QtCore.QFile("C:/for cheacher/3_mate_files/dark.qss")                              
    file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text)
    stream = QtCore.QTextStream(file)
    app.setStyleSheet(stream.readAll())

    sys.exit(app.exec_())

播放器.py:

money_perem = 0
income_perem_old = 500
income_perem = 0
credit_perem = 0
reputation_perem = 20
class player_1(QtWidgets.QWidget): 
    def __init__(self, parent=None):
        global money_perem, credit_perem, reputation_perem, income_perem, income_perem_old
        super(player_1, self).__init__(parent)
    
        self.setFixedSize(350, 550)
    
    #   изображение
        self.Label_ing = QLabel('', self)
        self.img = QtGui.QPixmap('C:/py/Monopolya/polzovatel_1.png')
        self.Label_ing.setPixmap(self.img)
    
        self.Label_ing.move(75, 20)
    
    
    #   манипуляции
    
    #   Валюта
        self.PB_money = QPushButton('Валюта ₽', self)
        self.PB_money.move(15, 260)
        self.PB_money.resize(150, 25)
        self.PB_money.setStyleSheet('font: 13pt \'Arial Black\'')
    
        self.PB_money.clicked.connect(self.money_func)
    
    #   Репутация
        self.PB_reputation = QPushButton('Репутация ⓇⓅ', self)
        self.PB_reputation.move(185, 260)
        self.PB_reputation.resize(150, 25)
        self.PB_reputation.setStyleSheet('font: 13pt \'Arial Black\'')
    
        self.PB_reputation.clicked.connect(self.reputation_func)
    
    #   Кредит
        self.PB_credit = QPushButton("Кредит", self)
        self.PB_credit.move(15, 300)
        self.PB_credit.resize(150, 25)
        self.PB_credit.setStyleSheet('font: 13pt \'Arial Black\'')
    
        self.PB_credit.clicked.connect(self.credit_func)
    #   Доход
        self.PB_income = QPushButton('Доход', self)
        self.PB_income.move(185, 300)
        self.PB_income.resize(150, 25)
        self.PB_income.setStyleSheet('font: 13pt \'Arial Black\'')
    
        self.PB_income.clicked.connect(self.income_func)
    
     #   информация
    
        self.Label_Money = QLabel(self)
        self.Label_Money.move(50, 350)
        self.Label_Money.resize(400, 25)
        self.Label_Money.setStyleSheet("font: 15pt \'Arial Black\'")
    
        self.Label_reputation = QLabel(self)
        self.Label_reputation.move(50, 400)
        self.Label_reputation.resize(400, 25)
        self.Label_reputation.setStyleSheet("font: 15pt \'Arial Black\'")
    
        self.Label_income = QLabel(self)
        self.Label_income.move(50, 450)
        self.Label_income.resize(400, 25)
        self.Label_income.setStyleSheet("font: 15pt \'Arial Black\'")
    
        self.Label_credit = QLabel(self)
        self.Label_credit.move(50, 500)
        self.Label_credit.resize(400, 25)
        self.Label_credit.setStyleSheet("font: 15pt \'Arial Black\'")
    
        self.t = QtCore.QTimer(interval=100)
        self.t.timeout.connect(self.update_info)
        self.t.start()
    
    def update_info(self):
        global money_perem, reputation_perem, income_perem, credit_perem, income_perem_old
    
        income_perem = income_perem_old / 100 * (100 - (100 - reputation_perem))
    
        self.Label_Money.setText('Деньги: ' + str(money_perem / 1000000) + ' ' + "млн ₽")
        self.Label_reputation.setText('Репутация: ' + str(reputation_perem) + ' ' + 'ⓇⓅ')
        self.Label_income.setText('Доход: ' + str(income_perem / 1000) + ' ' + '(' + str(income_perem_old / 1000) + ')' + ' тыс ₽')
        self.Label_credit.setText('Кредит: ' + str(credit_perem / 1000000) + ' ' + 'млн ₽')
    
    
    
    def credit_func(self):
        self.cr = credit()
        self.cr.show()
    def money_func(self):
        self.m = money()
        self.m.show()
    def reputation_func(self):
        self.rep = reputation()
        self.rep.show()
    def income_func(self):
        self.incom = income()
        self.incom.show()
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)                        
    file = QtCore.QFile("C:/for cheacher/3_mate_files/dark.qss")                              
    file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text)
    stream = QtCore.QTextStream(file)
    app.setStyleSheet(stream.readAll())

    w = player_1()
    w.show()

    sys.exit(app.exec_())
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2020-03-14T05:53:04Z2020-03-14T05:53:04Z

    class Player_1- 现在在布局管理器的控制下。

    Никаких глобальных переменных.

    изображение也换成dark.qss你的。我标记了我更改的行。尝试:

    import sys                                             #, os
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.Qt import *
    
    #import player
    class Player_1(QtWidgets.QWidget): 
        def __init__(self, parent=None):
    #-        global money_perem, credit_perem, reputation_perem, income_perem, income_perem_old
            super(Player_1, self).__init__(parent)
            
            self.money_perem = 0; 
            self.income_perem_old = 500; 
            self.income_perem = 0; 
            self.credit_perem = 0; 
            self.reputation_perem = 20
    
            self.setFixedSize(350, 550)
    
            #   изображение
            self.Label_ing = QLabel('', self)
            self.Label_ing.setPixmap(QtGui.QPixmap('head3.png').scaled(140, 140))       # !
    
            #?   манипуляции
    
            #   Валюта
            self.PB_money = QPushButton('Валюта ₽', minimumHeight=50)
            self.PB_money.clicked.connect(self.money_func)
            #   Репутация
            self.PB_reputation = QPushButton('Репутация ⓇⓅ', minimumHeight=50)
            self.PB_reputation.clicked.connect(self.reputation_func)
            #   Кредит
            self.PB_credit = QPushButton("Кредит", minimumHeight=50)
            self.PB_credit.clicked.connect(self.credit_func)
            #   Доход
            self.PB_income = QPushButton('Доход', minimumHeight=50)
            self.PB_income.clicked.connect(self.income_func)
            #   информация
            self.Label_Money = QLabel(self)
            self.Label_reputation = QLabel(self)
            self.Label_income = QLabel(self)
            self.Label_credit = QLabel(self)
    # ++ vvv
            self.grid_layout = QGridLayout(self)    
            self.grid_layout.addWidget(self.Label_ing, 0, 0, 2, 2, alignment=Qt.AlignCenter)
            self.grid_layout.addWidget(self.PB_money, 2, 0)
            self.grid_layout.addWidget(self.PB_reputation, 2, 1)
            self.grid_layout.addWidget(self.PB_credit, 3, 0)
            self.grid_layout.addWidget(self.PB_income, 3, 1) 
            self.grid_layout.addWidget(self.Label_Money, 4, 0, 1, 2)  
            self.grid_layout.addWidget(self.Label_reputation, 5, 0, 1, 2) 
            self.grid_layout.addWidget(self.Label_income, 6, 0, 1, 2) 
            self.grid_layout.addWidget(self.Label_credit, 7, 0, 1, 2) 
    # ++ ^^^
            self.t = QtCore.QTimer(interval=1000)                     # 100
            self.t.timeout.connect(self.update_info)
            self.t.start()
    
        def update_info(self):
    #-        global money_perem, reputation_perem, income_perem, credit_perem, income_perem_old
            self.income_perem = self.income_perem_old / 100 * (100 - (100 - self.reputation_perem))
            self.Label_Money.setText('Деньги: ' + str(self.money_perem / 1000000) + ' ' + "млн ₽")
            self.Label_reputation.setText('Репутация: ' + str(self.reputation_perem) + ' ' + 'ⓇⓅ')
            self.Label_income.setText('Доход: ' + str(self.income_perem / 1000) + ' ' + '(' + str(self.income_perem_old / 1000) + ')' + ' тыс ₽')
            self.Label_credit.setText('Кредит: ' + str(self.credit_perem / 1000000) + ' ' + 'млн ₽')
    
        def credit_func(self):
            self.cr = credit()
            self.cr.show()
            
        def money_func(self):
            self.m = money()
            self.m.show()
            
        def reputation_func(self):
            self.rep = reputation()
            self.rep.show()
            
        def income_func(self):
            self.incom = income()
            self.incom.show()
            
    
    class Main(QtWidgets.QWidget): 
        def __init__(self, parent=None):
            super(Main, self).__init__(parent)
            self.setFixedSize(700, 600)        # 750, 560
    #
            self.p1 = Player_1()
            self.p2 = Player_1()                                                        # +
            self.p3 = Player_1()                                                        # +
            self.stting = QLabel("админ - панель")                                      # ? Sttings()
            self.stting.setFixedSize(350, 550)
    # ++ vvv
            self.widget = QWidget()
            self.lay = QHBoxLayout(self.widget)   # self
            self.lay.setContentsMargins(0, 0, 0, 0)        
            self.lay.addWidget(self.stting)
            self.lay.addWidget(self.p1) #Player_1())
            self.lay.addWidget(self.p2) #Player_1())
            self.lay.addWidget(self.p3) #Player_1())
    # ++ ^^^
            self.scroll_area = QtWidgets.QScrollArea(self) 
    #-        self.scroll_area.setLayout(self.lay)
            self.scroll_area.setWidget(self.widget)
            self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
    
            self.scrollbar = QtWidgets.QScrollBar(Qt.Horizontal, self)  
    # ?        self.scrollbar.setMaximum(250)
            self.scrollbar.setMaximum(self.scroll_area.horizontalScrollBar().maximum())
            self.scrollbar.valueChanged.connect(self.sync_func)   
    
            self.v_layout = QtWidgets.QVBoxLayout(self)
            self.v_layout.addWidget(self.scroll_area)
            self.v_layout.addWidget(self.scrollbar)
    
        def sync_func(self):
            self.scroll_area.horizontalScrollBar().setValue(self.scrollbar.value())    # ?  * 1
            self.transition()
    
        def transition(self):
    #        player.reputation_perem = player.reputation_perem + (player.reputation_perem / 100 * 5)
    #        player.money_perem = player.money_perem + player.income_perem
            self.p1.reputation_perem = self.p1.reputation_perem + (self.p1.reputation_perem / 100 * 5)
            self.p1.money_perem = self.p1.money_perem + self.p1.income_perem
    
           #reputation_perem_2 = reputation_perem_2 + (reputation_perem_2 / 100 * 5)
           #income_perem_2 = income_perem_old_2 / 100 * (100 - (100 - reputation_perem_2))
           #money_perem_2 = money_perem_2 + income_perem_2
           
           
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)  
        app.setFont(QFont("Arial Black", 12, QFont.Bold)) 
    
        w = Main()
        w.show()
    
    #    file = QtCore.QFile("C:/for cheacher/3_mate_files/dark.qss") 
        file = QtCore.QFile("D:/_Qt/Python-Examples/_PyQt5/Style/BreezeStyleSheets/dark.qss")    # !
        file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text)
        stream = QtCore.QTextStream(file)
        app.setStyleSheet(stream.readAll())
    
        sys.exit(app.exec_())
    

    在此处输入图像描述

    • 5

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5