RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-579147

NTA's questions

Martin Hope
NTA
Asked: 2024-07-29 05:31:19 +0000 UTC

为什么在flet中添加page.open时整个页面被删除

  • 6

我正在编写一个程序flet。添加了,每次刷新页面时BottomSheet都会在特定条件下出现。page.open当我添加它时,页面清空了,什么也没有。当我删除 时page.clean,一切正常,但是当我更改页面时,前一个页面没有被删除,并且它们相互重叠。为什么我不能同时使用这两个功能?
代码:(短)

import flet as ft
#другие импорты

#база данных и т.д. и т.п.

def main(page: ft.Page):
    #тут стоит настройка страницы (ширина\длина\цвет)
    
    #тут стоят функции разные
    
    def check_stake(): 
        stake_data = db.get_stake()
        return funcs.convert_iso(stake_data[1]) <= funcs.convert_iso(funcs.get_time())
    
    def route_change(e):
        page.clean() #вот тут чищу страницу
        def go_stake(e):
            page.go('/stake')
        
        if check_stake():
            stake_data = db.get_stake()
            page.open(views.stake_sheet(funcs.count_stake(stake_data[0]), stake_data[1], go_stake)) #тут открывают sheet и все ломается
        
        if page.route == '/':
            #тут всякие функции и page.add, короче views
        #...
        #много кода страниц
        #...

    page.on_route_change = route_change
    page.go(page.route)
    page.update()

ft.app(main)

代码BottomSheet(views.stake_sheet)

def stake_sheet(stake_before, stake_after, go_stake):
    return ft.BottomSheet(
        ft.Column(
            [
                ft.Text(f'Вы успешно застейкали -1 монет и получили -2 монет!'),
                ft.ElevatedButton(
                    'Собрать монеты',
                    bgcolor='#0089d4',
                    color='white',
                    on_click=go_stake,
                    style=ft.ButtonStyle(
                        shape=ft.RoundedRectangleBorder(radius=10)
                    )
                )
            ]
        )
    )

page.clean+ (一切似乎都很好,但所有页面小部件都在范围内,并且只有第一页可见 (BottomSheet 愚蠢地丢失了._。) 甚至不要问为什么我需要钱包page.open 页面.清理 + 页面.打开 page.openpage.open(一切似乎都很好,但所有页面小部件都在范围内,并且只有第一页可见 page.clean页面清理

python
  • 1 个回答
  • 21 Views
Martin Hope
NTA
Asked: 2024-06-07 16:24:14 +0000 UTC

当时区支持处于活动状态时,Django 收到了一个天真的日期时间 (2024-06-01 00:00:00) 错误

  • 5

我正在 django telegram 中启动一个机器人,在我写入/statistic机器人后出现此错误:

D:\projects\neotelecom-master\venv\Lib\site-packages\django\db\models\fields\__init__.py:1366: RuntimeWarning: DateTimeField JoinUs.created_at received a naive datetime (2024-06-01 00:00:00) while time zone support is active.
  warnings.warn("DateTimeField %s.%s received a naive datetime "
D:\projects\neotelecom-master\venv\Lib\site-packages\django\db\models\fields\__init__.py:1424: RuntimeWarning: DateTimeField JoinUs.created_at received a naive datetime (2024-06-07 14:01:50.475535) while time zone support is active.
  warnings.warn("DateTimeField %s received a naive datetime (%s)"
D:\projects\neotelecom-master\venv\Lib\site-packages\django\db\models\fields\__init__.py:1366: RuntimeWarning: DateTimeField CallMe.created_at received a naive datetime (2024-06-01 00:00:00) while time zone support is active.
  warnings.warn("DateTimeField %s.%s received a naive datetime "
D:\projects\neotelecom-master\venv\Lib\site-packages\django\db\models\fields\__init__.py:1424: RuntimeWarning: DateTimeField CallMe.created_at received a naive datetime (2024-06-07 14:01:50.475535) while time zone support is active.
  warnings.warn("DateTimeField %s received a naive datetime (%s)"
2024-06-07 14:01:53,787 (util.py:65 WorkerThread2) ERROR - TeleBot: "ApiException occurred, args=('A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:\n[b\'{"ok":false,"error_code":400,"description":"Bad Request: can\\\'t parse entities: Can\\\'t find end of the entity starting at byte offset 186"}\']',)
Traceback (most recent call last):
  File "D:\projects\neotelecom-master\venv\Lib\site-packages\telebot\util.py", line 59, in run
    task(*args, **kwargs)
  File "D:\projects\neotelecom-master\core\applications\tbot\bot_core.py", line 42, in repeat_all_messages
    t_bot.send_message(message.chat.id, text, parse_mode='markdown')
  File "D:\projects\neotelecom-master\venv\Lib\site-packages\telebot\__init__.py", line 597, in send_message
    apihelper.send_message(self.token, chat_id, text, disable_web_page_preview, reply_to_message_id,
  File "D:\projects\neotelecom-master\venv\Lib\site-packages\telebot\apihelper.py", line 140, in send_message
    return _make_request(token, method_url, params=payload, method='post')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\projects\neotelecom-master\venv\Lib\site-packages\telebot\apihelper.py", line 56, in _make_request
    return _check_result(method_name, result)['result']
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\projects\neotelecom-master\venv\Lib\site-packages\telebot\apihelper.py", line 75, in _check_result
    raise ApiException(msg, method_name, result)
telebot.apihelper.ApiException: A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[b'{"ok":false,"error_code":400,"description":"Bad Request: can\'t parse entities: Can\'t find end of the entity starting at byte offset 186"}']    
"
2024-06-07 14:01:53,788 (__init__.py:417 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[b'{"ok":false,"error_code":400,"description":"Bad Request: can\'t parse entities: Can\'t find end of the entity starting at byte offset 186"}']"

applications/tbot/bot_core.py:

import datetime
import telebot
import pytz

from applications.core.models import JoinUs, CallMe
from project import settings

t_bot = telebot.TeleBot(settings.BOT_API_KEY)


def _get_users_list(obj):
    users = {}
    for item in obj:
        if item.user in users.keys():
            users[item.user] += 1
            continue
        users[item.user] = 1

    join_us_users = ''
    for user in users:
        join_us_users += f" \n{user}  -  {users[user] }"

    return join_us_users


@t_bot.message_handler(commands=["statistic"])
def repeat_all_messages(message):
    first_day = datetime.date.today().replace(day=1)
    current_time = datetime.datetime.now()

    join_us = JoinUs.objects.filter(status='accepted', created_at__gte=first_day, created_at__lte=current_time).all()
    join_us_users = _get_users_list(join_us)

    call_me = CallMe.objects.filter(status='accepted', created_at__gte=first_day, created_at__lte=current_time).all()
    call_me_users = _get_users_list(call_me)

    text = (f'*Статистика по операторам за текущий месяц* \n'
            f'Принято заявок на подключение: {join_us_users} \n'
            f'_______________________________________________\n'
            f'Принято обратных звонков: {call_me_users} \n'
            )

    t_bot.send_message(message.chat.id, text, parse_mode='markdown')


@t_bot.callback_query_handler(func=lambda call: True)
def get_callback_user(call):
    if call:
        message = call.message
        user = call.from_user
        
        if user.username:
            user_data = f'@{user.username}'
        elif user.last_name and user.first_name:
            user_data = f'{user.last_name} {user.first_name}'
        elif user.last_name:
            user_data = user.last_name
        else:
            user_data = user.first_name

        data = call.data.split('.')
        if data[0] == 'join_us':
            join_us = JoinUs.objects.filter(pk=data[1]).last()
            if not join_us:
                t_bot.send_message(message.chat.id, 'Произошла какая-то ошибка. Не могу найти заявку :(')
                return

            if join_us.status == 'accepted':
                t_bot.send_message(message.chat.id, 'Заявка уже обработна другим оператором.')
                return

            join_us.status = 'accepted'
            join_us.user = user_data
            join_us.save()

            t_bot.edit_message_text(chat_id=message.chat.id, message_id=message.message_id,
                                text=f'{message.text}\nЗаявку принял(а) {user_data}',
                                reply_markup=None)

        elif data[0] == 'call_me':
            call_me = CallMe.objects.filter(pk=data[1]).last()
            if not call_me:
                t_bot.send_message(message.chat.id, 'Произошла какая-то ошибка. Не могу найти заявку :(')
                return

            if call_me.status == 'accepted':
                t_bot.send_message(message.chat.id, 'Заявка уже обработна другим оператором.')
                return

            call_me.status = 'accepted'
            call_me.user = user_data
            call_me.save()

            t_bot.edit_message_text(chat_id=message.chat.id, message_id=message.message_id,
                                text=f'{message.text}\nЗаявку принял(а) {user_data}',
                                reply_markup=None)

        elif data[0] == 'month':
            first_day = datetime.date.today().replace(day=1)
            current_time = datetime.datetime.now()

            join_us = JoinUs.objects.filter(status='accepted', created_at__gte=first_day, created_at__lte=current_time).all()
            join_us_users = _get_users_list(join_us)

            call_me = CallMe.objects.filter(status='accepted', created_at__gte=first_day, created_at__lte=current_time).all()
            call_me_users = _get_users_list(call_me)

            text = (f'*Статистика по операторам за текущий месяц* \n'
                    f'Принято заявок на подключение: {join_us_users} \n'
                    f'_______________________________________________\n'
                    f'Принято обратных звонков: {call_me_users} \n'
                    )

            t_bot.edit_message_text(chat_id=message.chat.id, message_id=message.message_id, text=f'error', parse_mode='markdown')

applications/core/models.py:

from ckeditor_uploader.fields import RichTextUploadingField
from django.db import models

STATUS_CHOICES = (
    ('new', 'Новая заявка'),
    ('accepted', 'Принятая заявка'),
)


class City(models.Model):
    title = models.CharField('Город', max_length=200)
    slug = models.SlugField('Слаг города', max_length=50, unique=True, db_index=True)
    is_active = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'город'
        verbose_name_plural = 'города'

    def __str__(self):
        return self.title


class JoinUs(models.Model):
    OWNERSHIP_CHOICES = (
        ('fiz', 'Физическе лицо'),
        ('yur', 'Юридическое лицо'),
    )

    FORM_TYPE_CHOICES = (
        ('gpon', 'GPON'),
        ('4g', '4G'),
        ('smart', 'Smart TV'),
        ('neo', 'NEO TV'),
    )

    form_type = models.CharField('Тип заявки', max_length=50, choices=FORM_TYPE_CHOICES, default='')
    name = models.CharField('Имя', max_length=100)
    phone = models.CharField('Номер телефона', max_length=100)
    address = models.CharField('Адрес', max_length=150)
    ownership = models.CharField('Форма собственности', max_length=50, choices=OWNERSHIP_CHOICES, default='')

    user = models.CharField('Оператор принявший заявку', max_length=255, blank=True, default='')
    status = models.CharField('Статус заявки', max_length=50, choices=STATUS_CHOICES, default='new')

    created_at = models.DateTimeField('Дата поступления', auto_now_add=True)

    class Meta: 
        ordering = ['-created_at']
        verbose_name = 'заявка'
        verbose_name_plural = 'заявки'

    def __str__(self):
        return f'{self.name} - {self.phone}'


class CallMe(models.Model):
    name = models.CharField('Имя', max_length=100)
    phone = models.CharField('Номер телефона', max_length=100)

    user = models.CharField('Оператор принявший заявку', max_length=255, blank=True, default='')
    status = models.CharField('Статус звонка', max_length=50, choices=STATUS_CHOICES, default='new')

    created_at = models.DateTimeField('Дата поступления', auto_now_add=True)

    class Meta:
        ordering = ['-created_at']
        verbose_name = 'звонок'
        verbose_name_plural = 'звонки'

    def __str__(self):
        return f'{self.name} - {self.phone}'


class Vacancy(models.Model):
    title = models.CharField('Заголовок', max_length=100)
    short_description = models.CharField('Краткое описание', max_length=250,
                                         help_text='Краткий текст в списке вакансий для вовлечения соискателей.')
    description = RichTextUploadingField('Описание')

    created_at = models.DateField('Дата создания', auto_now_add=True)

    class Meta:
        ordering = ['-created_at']
        verbose_name = 'вакансия'
        verbose_name_plural = 'вакансии'

    def __str__(self):
        return self.title


class NeoTvFiles(models.Model):
    MOBILE_FILE_TYPE_CHOICES = (
        ('win', 'Windows'),
        ('macos', 'Mac OS'),
        ('armv7', 'Android arm v7'),
        ('armx64', 'Android arm x64'),
        ('armx86', 'Android arm x86'),
        ('youtube', 'YouTube плеер'),
    )
    type = models.CharField('Тип файла', max_length=50, unique=True, choices=MOBILE_FILE_TYPE_CHOICES)
    url = models.FileField('Файл для загрузки', upload_to='neo_tv_files/')

    class Meta:
        verbose_name = 'приложение NEO TV'
        verbose_name_plural = 'приложения NEO TV'

    def __str__(self):
        return self.get_type_display()

使用django 2.2 版management/commands命令启动机器人python manage.py start_bot

python
  • 1 个回答
  • 61 Views
Martin Hope
NTA
Asked: 2024-04-07 17:13:25 +0000 UTC

python中通过os获取目录中的文件列表

  • 5

代码:

from os import system, mkdir, listdir
from os.path import isdir

dirr = __file__[0:__file__.find('pyversave.py')]
files = listdir(dirr)
for i in files:
    if 'versave' in i:
        files.pop(files.index(i))
    elif isdir(i):
        files.pop(files.index(i))
print('directory:', dirr)
print('files detected:', files)

结论:

directory: C:\Users\Admin\Desktop\EduCet\
files detected: ['api.py', 'db.db', 'db.py', 'main.py', 'pyversave.py', 'venv', 'views.py', 'web.db', 'web.py', '__pycache__']

为什么文件pyversave.py和目录没有被删除venv, __pycache__
列表应该只包含名称不包含versave的文件

目录中的所有文件夹和文件:

'api.py', 'api.py-versave', 'db.db', 'db.db-versave', 'db.py', 'db.py-versave', 'main.py', 'main.py-versave', 'pyversave.py', 'pyversave.py-versave', 'venv', 'versions', 'views.py', 'views.py-versave', 'web.db', 'web.db-versave', 'web.py', 'web.py-versave'

另外,为什么versions文件夹不在列表中,但__pycache__它们venv却在那里,即使它们不应该都是文件夹?

python
  • 1 个回答
  • 24 Views
Martin Hope
NTA
Asked: 2024-02-24 00:09:35 +0000 UTC

请求停止脚本

  • 5

我正在编写一个 API 函数来接收来自任务的注释,但由于某种原因,请求开始中断代码的执行。

代码:

    def comments(self, task_id):
        task = response(f'http://***********/api.php?key=*******&cat=task&action=show&id={task_id}')['data']
        comments = {}

        try:
            print(task['comments'])
            for comment in task['comments']:
                print(1)
                comment = task['comments'][comment]
                print(2)
                author = response(f'http://***********/api.php?key=*******&cat=employee&action=get_data&id={comment["employee_id"]}')['data'][0]
                print(3)
                comments[comment['comment']] = author['name']
                print(4)
        except KeyError:
            pass

        return comments

控制台输出:

{'5380': {'id': 5380, 'employee_id': 184, 'comment': '56456456'}, '5379': {'id': 5379, 'employee_id': 184, 'comment': 'wewfwefwqfq'}}
1
2

API 图像:
cat=task&action=show&id=id:

{
    "data": {
        [id]: {
            "id": [id],
            "name": [name],
            ...
        }
    }
}        

猫=员工&行动=get_data&id=id:

{
    "data": {
        "id": [id],
        "comments": {
            [id]: {
                "id": [id],
                "employee_id": [author],
                "comment": [comment]
            }
        },
        ...
    }
}

如果您手动访问该站点,那么一切都可以使用
api 密钥进行,并且我用“*”隐藏了该站点

python
  • 1 个回答
  • 22 Views
Martin Hope
NTA
Asked: 2024-02-23 19:40:23 +0000 UTC

编译flet到apk时出错

  • 5

我正在将我的 flet 应用程序编译成 apk 文件。在此之前,一切正常,但在我将requests其添加到后requirements.txt,开始出现错误:

Flet app package app/app.zip was not created.

完整日志:

(venv) PS C:\Users\Admin\Desktop\NeoTelecom> flet build apk 
Creating Flutter bootstrap project...OK
Customizing app icons and splash images...OK
Generating app icons...OK
Generating splash screens...OK
Packaging Python app...Flet app package app/app.zip was not created.

如果我requirements.txt从目录中删除,那么一切正常,但是当我启动应用程序时,它会显示ModuleNotFoundError

Contents requirements.txt:

requests==2.31.0
python
  • 2 个回答
  • 34 Views
Martin Hope
NTA
Asked: 2024-02-23 03:21:59 +0000 UTC

平面滚动不起作用

  • 5

我正在通过 Flet 使用 Python 制作 Android 应用程序。我需要显示任务列表,但它并不总是适合屏幕,所以我决定滚动。然而,这不起作用。

main.py代码:

from flet import *
import views
import database as db

def main(page: Page):
    page.title = 'NeoTelecom'
    page.theme_mode = 'dark'
    page.scroll = 'adaptive'

    page.vertical_alignment = CrossAxisAlignment.START
    page.horizontal_alignment = MainAxisAlignment.CENTER

    page.window_width = 400

    page.padding = 0
    page.spacing = 0

    def route_change(e: RouteChangeEvent):
        page.views.clear()

        if page.route == '/':
            #главная страница
        
        elif page.route == '/task':
            def go_main(e):
                page.go('/main')

            def go_comment(e):
                data.data['task_id'] = e.control.data
                page.go('/task/comment')

            def go_navigate(e):
                data.data['task_id'] = e.control.data
                page.go('/task/navigate')


            view_task = views.Task(go_main, go_navigate, go_comment)
            
            #получаю tasks через api...
            
            page.views.append(view_task.view(tasks))

    page.on_route_change = route_change
    page.go(page.route)
    page.update()
    


app(target=main, assets_dir='assets/')

意见:

class Task:
    def __init__(self, go_main, go_navigate, go_comment):
        self.go_main = go_main
        self.go_navigate = go_navigate
        self.go_comment = go_comment

    def task(self, task_id, status, cust_name, cust_address, cust_phone, date, _type):
        return Column(
            [
                #код для отображения одного задания
            ],
            scroll='adaptive'
        )

    def view(self, tasks):
        return View(
            route='/task',
            controls=[
                #заголовки
                        Container(
                            Column(
                                tasks,
                                alignment=MainAxisAlignment.CENTER,
                                scroll='adaptive',
                                expand=1
                            ),
                            padding=padding.only(top=20)
                        )
                    ]
                )
            ]
        )

我尝试将其放入 page.scroll 和 Column.scroll 中:

ScrollMode.ALWAYS;
'always';
ScrollMode.AUTO;
'auto';
ScrollMode.ADAPTIVE;
'adaptive'

这些都没有帮助。通过触摸板滚动不起作用,手指滑动不起作用并且滑块不出现

python
  • 1 个回答
  • 23 Views
Martin Hope
NTA
Asked: 2024-02-21 21:25:16 +0000 UTC

AppBar 未显示在 Flet 中

  • 5

我用的是flet,想添加AppBar,但是不显示。同时,如果我删除路由,它也会显示。我尝试将其放在views.clear()之后,更改appbar设置,更改名称,但没有帮助。互联网上没有任何关于此的信息。平 0.20.0

from flet import *

button_style = ButtonStyle(shape=RoundedRectangleBorder(radius=10), bgcolor='blue', color='white')
center = MainAxisAlignment.CENTER

class Api:
    def login(self, login, password):
        return 1
api = Api()

class Data:
    data = {'do':'', 'data':{}, 'user_id':0, 'task_id':0, 'customer_id':0, 'store_id':0}
data = Data()

def main(page: Page):
    page.title = 'NeoTelecom'
    page.vertical_alignment = CrossAxisAlignment.START
    page.horizontal_alignment = center
    page.window_width = 400
    page.window_height = 700
    page.padding = 0
    page.spacing = 0
    page.appbar = AppBar(toolbar_height=100, leading=Icon(icons.ABC), bgcolor='blue') #<- не отображает appbar


    def route_change(e: RouteChangeEvent):
        page.views.clear()

        if page.route == '/':
            data.data['do'] = 'checkSign'
            login = TextField(bgcolor='gray', max_lines=1, label='Логин', border_radius=10)
            password = TextField(bgcolor='gray', password=True, max_lines=1, label='Пароль', border_radius=10)
            data.data['data']['login'] = login.value
            data.data['data']['password'] = password.value

            page.views.append(
                View(
                    route='/',
                    controls=[
                        Column(
                            [
                                Container(
                                    Column(
                                        [
                                            Container(
                                                Text(value='NeoTelecom', size=50, italic=True),
                                                padding=padding.only(left=50, bottom=80)
                                            ),
                                            Container(
                                                Column(
                                                    [
                                                        login,
                                                        password
                                                    ], 
                                                ),
                                                padding=padding.only(left=20, right=20)
                                            ),
                                            Container(
                                                ElevatedButton(text='Вход', scale=1.5, height=30, width=140, style=button_style, on_click=lambda _: page.go('/main')), 
                                                padding=padding.only(left=100, top=100)
                                            ),
                                        ]
                                    ),
                                )
                            ], 
                            spacing=30, alignment=alignment.top_center
                        )
                    ]    
                )    
            )


        if page.route == '/main':
            if data.data['do'] == 'checkSign':
                user_id = api.login(data.data['data']['login'], data.data['data']['password'])
                if user_id == -1:
                    pass
                else:
                    data.data['user_id'] = user_id
                    data.data['data'] = {}
                    page.show_snack_bar(
                        SnackBar(
                            Text(f'Успешный вход! ID: {user_id}')
                        )
                    )
                    page.views.append(
                        View(
                            route='/main',
                            controls=[
                                Column(
                                    [
                                        Column(
                                            [
                                                Container(
                                                    Text(value='   ', size=20, color='white'), 
                                                    alignment=alignment.center, bgcolor='blue', width=450, height=70
                                                )
                                            ], 
                                            spacing=10
                                        ),
                                        Container(
                                            Text(value='NeoTelecom', size=50, italic=True),
                                            padding=padding.only(left=50, bottom=80)
                                        ),
                                    ], 
                                    spacing=30, alignment=alignment.top_center
                                )
                            ]
                        )
                    )

    page.on_route_change = route_change
    page.go(page.route)
    page.update()
    


app(target=main)

结果:
结果

AppBar 已经消失在某处...

python
  • 1 个回答
  • 20 Views
Martin Hope
NTA
Asked: 2024-02-20 23:31:39 +0000 UTC

启动车队应用程序时出错

  • 5

我运行代码并出现错误:

Exception in thread Thread-7 (info):
Traceback (most recent call last):
  File "D:\Python310\lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "D:\Python310\lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Admin\desktop\jangame\main.py", line 14, in info
    page.add(
  File "D:\Python310\lib\site-packages\flet_core\page.py", line 315, in add
    r = self.__update(self)
  File "D:\Python310\lib\site-packages\flet_core\page.py", line 431, in __update
    commands, added_controls, removed_controls = self.__prepare_update(*controls)
  File "D:\Python310\lib\site-packages\flet_core\page.py", line 456, in __prepare_update
    control.build_update_commands(
  File "D:\Python310\lib\site-packages\flet_core\control.py", line 411, in build_update_commands
    ctrl.build_update_commands(
  File "D:\Python310\lib\site-packages\flet_core\control.py", line 423, in build_update_commands
    innerCmds = ctrl._build_add_commands(
  File "D:\Python310\lib\site-packages\flet_core\control.py", line 469, in _build_add_commands
    command = self._build_command(False)
  File "D:\Python310\lib\site-packages\flet_core\control.py", line 496, in _build_command
    self._before_build_command()
  File "D:\Python310\lib\site-packages\flet_core\container.py", line 210, in _before_build_command
    self._set_attr_json("alignment", self.__alignment)
  File "D:\Python310\lib\site-packages\flet_core\control.py", line 144, in _set_attr_json
    nv = self._convert_attr_json(value)
  File "D:\Python310\lib\site-packages\flet_core\control.py", line 150, in _convert_attr_json
    json.dumps(value, cls=EmbedJsonEncoder, separators=(",", ":"))
  File "D:\Python310\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "D:\Python310\lib\site-packages\flet_core\embed_json_encoder.py", line 43, in encode
    return super().encode(self._convert_enums(o))
  File "D:\Python310\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "D:\Python310\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "D:\Python310\lib\site-packages\flet_core\embed_json_encoder.py", line 40, in default
    return self._convert_enums(obj.__dict__)
AttributeError: 'mappingproxy' object has no attribute '__dict__'. Did you mean: '__dir__'?

代码:

from flet import *

button_style = ButtonStyle(shape=RoundedRectangleBorder(radius=10))
center = MainAxisAlignment.CENTER

def main(page: Page):
    page.title = 'App'
    page.vertical_alignment = center
    page.horizontal_alignment = center
    page.window_width = 400
    page.window_height = 700

    def info(e):
        page.add( #ошибка здесь
            Container(Column(
                [
                    Text(value='Информация не добавлена', size=30),
                    Container(Column([ElevatedButton(text='Назад', scale=2, height=40, width=150, style=button_style)]),alignment=alignment.bottom_right)
                ]), alignment=center))

    def start(e=None):
        #код "start"
    if page.route == '/':
        info() #для отладки сделал сразу info, а не start
    page.update()


app(target=main)

我尝试添加选项卡、移至新行、从容器中删除部件,但没有帮助。唯一的救赎是从信息中完全删除所有代码。问题是什么?

python
  • 1 个回答
  • 18 Views
Martin Hope
NTA
Asked: 2024-01-16 00:36:24 +0000 UTC

如何在机器人中每 5 秒执行一个函数

  • 5

我有一个特定的功能来检查是否有汽车需要更换燃油。如果有这样的汽车,它会以电报的形式向用户发送消息。我希望该函数每 5 秒触发一次,而不干扰 aiogram 开始轮询。

这是我在网上找到的代码,但它不起作用:

from aiogram import Bot, Dispatcher, executor, types
from asyncio import create_task, sleep, get_event_loop
from handlers.admin import check_oil_change
from config import TOKEN

# =========== base variables =============
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

# ========== handlers ============
...

# ============ polling ==============
async def main():
    create_task(executor.start_polling(dp))
    while True:
        await sleep(5)
        await check_oil_change(bot)

loop = get_event_loop()
if __name__ == '__main__':
    loop.run_until_complete(main())
    loop.close()

爱图 2.25.2

python
  • 2 个回答
  • 42 Views
Martin Hope
NTA
Asked: 2023-12-30 21:51:07 +0000 UTC

Python aiogram 2.25.2错误TypeError:InlineKeyboardButton类型的对象不是JSON可序列化的

  • 5

帮助修复错误 TypeError: InlineKeyboardButton 类型的对象不可 JSON 序列化

主要.py:

from config import TOKEN
from logging import basicConfig, INFO
from buttons import *

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
basicConfig(level=INFO)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await message.answer('Добро пожаловать в бота!', reply_markup=button_1)


@dp.message_handler(text='Кнопка 1')
async def button1(message: types.Message):
    await message.answer('Ответ на кнопку 1')

@dp.message_handler(text='Кнопка 2')
async def button1(message: types.Message):
    await message.answer('Ответ на кнопку 2')

@dp.message_handler(text='Кнопка 3')
async def button1(message: types.Message):
    await message.answer('Ответ на кнопку 3')


if __name__ == '__main__':
    executor.start_polling(dp)

按钮.py:

from aiogram import types

button_1l = [
    types.InlineKeyboardButton('Кнопка 1'),
    types.InlineKeyboardButton('Кнопка 2'),
    types.InlineKeyboardButton('Кнопка 3')
]

button_1 = types.InlineKeyboardMarkup(resize_keyboard=True).add(button_1l)

启动bot并输入/start后,出现错误:TypeError: Object of type InlineKeyboardButton is not JSON Serialized

我在互联网上寻找解决方案,但没有发现任何特别有用的东西。我尝试切换到 aiogam 3.2,但出现其他错误

Python:3.10.2 Aiogam:2.25.2

python
  • 1 个回答
  • 21 Views

Sidebar

Stats

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

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 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